[Android] 네트워크 통신 Volley 라이브 러리 사용하기

원준·2023년 7월 20일

Android Studio

목록 보기
21/40

Volley ?

  • Android 앱의 네트워킹을 더 쉽고, 빠르게 해주는 HTTP 라이브러리 라고 한다.
  • 네트워크 설정은 필수로 하고 오자.

그래서 사용은?

1. 설정

  • 따로 설정할 것은 없는데, 외부 라이브러리이기 때문에 설치를 해줘야 한다.
  • Gradle Scripts/build.gradle에 코드를 추가하면 설치되는것을 우리는 알고있다.
    dependencies {
       implementation 'com.android.volley:volley:1.2.1'
    }

2. 네트워크 통신

  • Volley 네트워크를 통신하는데 있어서 크게 3가지의 방법으로 나뉜다.
  1. 네트워크 통신을 위해 Volley 준비

    // 네트워크 통신을 위해 Volley 준비
     RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
  2. Request 요청 만들기

    // Request요청을 만들어야 한다. 값 1개를 가져올때 사용하는 방법
    JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.GET,
        "url",
        null, //보낼 값
        new Response.Listener<JSONObject>() { // 요청에 성공했을때
            @Override
            public void onResponse(JSONObject response) {
    
            }
        },
        new Response.ErrorListener() { // 요청에 실패했을때
            @Override
            public void onErrorResponse(VolleyError error) {
    
            }
        }
    );
  3. 네트워크 통신 시작

    //네트워크 통신 시켜라.
    queue.add(request);

GET 통신

  • Volley로 GET방식에 대해 통신을 해보자.

  • 통신하는데 있어서 준비와 시작에 관해서는 POST와 크게 차이가 없다.

    // Request요청을 만들어야 한다. 값 1개를 가져올때 사용하는 방법
      JsonObjectRequest request = new JsonObjectRequest(
          Request.Method.GET,
          "https://jsonplaceholder.typicode.com/posts/1",
          null, //보낼 값
          new Response.Listener<JSONObject>() {
              @Override
              public void onResponse(JSONObject response) {
                  // 1. 데이터를 가져오는 작업
                  try {
                      int userId = response.getInt("userId");
                      int id = response.getInt("id");
                      String title = response.getString("title");
                      String body = response.getString("body");
    
                      // 2. 화면에 보여주는 작업
                      txtUserId.setText(userId + "");
                      txtId.setText(id + "");
                      txtTitle.setText(title);
                      txtBody.setText(body);
    
                  } catch (JSONException e) {
                      // 오류 관련해서 유저한테 알려주는 구문 작성하면 된다.
                      Log.i("MAIN HTTP ERROR", e.toString());
                      Toast.makeText(MainActivity.this, "네트워크 통신중 문제 발생", Toast.LENGTH_SHORT).show();
    
                      return;
                  }
              }
          },
          new Response.ErrorListener() {
              @Override
              public void onErrorResponse(VolleyError error) {
    			// 통신에 실패할 경우에 대해 로직 작성
              }
          }
      );

POST 통신

  • GET 방식과는 다르게 앞서 준비해야하는 데이터가 존재한다.
  • POST는 Body에 데이터를 담아서 보내기에 JSON의 형태로 보내기 위해 미리 데이터를 만들어 준비하자.
// url 및 데이터 설정
String url = "https://openapi.naver.com/v1/papago/n2mt";
JSONObject body = new JSONObject(); //보낼 데이터
try {
    body.put("source", source);
    body.put("target", target);
    body.put("text", text);
} catch (JSONException e) {
    throw new RuntimeException(e);
}

// POST 통신 설정
JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.POST,
        url, //URL 설정
        body, // 보낼 데이터 JSON 설정
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                //네이버로 부터 받은 데이터를 처리하고 화면에 표시
                try {
                    String translatedText = response.getJSONObject("message").getJSONObject("result").getString("translatedText");
                    txtResult.setText(translatedText);

                    Papago papago = new Papago(text, translatedText, target);

                    papagoArrayList.add(papago);

                } catch (JSONException e) {
                    throw new RuntimeException(e);
                }


            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
          
            }
        }
);

Header 설정

  • 다른 API를 사용하다보면 Header에 관련해서 설정해야하는 부분이 있는데, 알아보자.
  • Header 설정은 위 POST 코드를 이용해 추가를 진행할 것이고, 가장 하단에 추가를 진행한다.
// POST 통신 설정
JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.POST,
        url, //URL 설정
        body, // 보낼 데이터 JSON 설정
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                //네이버로 부터 받은 데이터를 처리하고 화면에 표시
                try {
                    String translatedText = response.getJSONObject("message").getJSONObject("result").getString("translatedText");
                    txtResult.setText(translatedText);

                    Papago papago = new Papago(text, translatedText, target);

                    papagoArrayList.add(papago);

                } catch (JSONException e) {
                    throw new RuntimeException(e);
                }


            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
          
            }
        }
){ // 헤더 설정

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> header = new HashMap<>();
        //header.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        header.put("X-Naver-Client-Id", Config.NAVER_CLIENT_ID);
        header.put("X-Naver-Client-Secret", Config.NAVER_CLIENT_SECRET);

        return header;
    }
};
profile
공부해보자

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

좋은 글 잘 읽었습니다, 감사합니다.

답글 달기