[안드로이드] Volley를 이용한 HTTP 통신

김영훈·2020년 4월 20일
0
post-thumbnail
post-custom-banner

안드로이드에서 웹서버에 데이터를 요청하고 응답을 받을 때 HttpURLConnection을 사용합니다.

하지만 요청과 응답을 위한 코드의 양이 많고 스레드를 사용하면서 더 많은 코드를 작성해야 합니다.

더 간단한 HTTP 통신을 위해 안드로이드에서 제공하는 HTTP 통신 라이브러리 Volley 를 사용해봅시다.

1. Volley의 장점

- 네트워크 요청의 자동 예약
- 여러 개의 동시 네트워크 연결
- 표준 HTTP 캐시 일관성을 갖춘 투명한 디스크 및 메모리 응답 캐싱
- 요청(Request)의 우선순위 자동으로 관리
- 취소 요청 API
- 강력한 정렬 기능을 이용해 네트워크에서 비동기식으로 가져온 데이터로 UI를 올바로 채우는 작업을 쉽게 실행함

2. Volley 사용하는 방법

Volley의 작동 구조는 먼저 Request 요청객체를 만들고 이 요청객체를 requestQueue(요청 큐)에 넣어주면 이 requestQueue가 자동으로 웹서버에 요청을 해주고 응답을 받아 사용자가 사용할 수 있게 지정된 메소드를 호출해줍니다.

사용 준비

build.gradle 파일에 다음과 같이 종속성을 추가합니다.

dependencies {
        ...
        implementation 'com.android.volley:volley:1.1.1'
    }

또한 인터넷을 사용하므로 AndroidManifest.xml에 권한을 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/>

예제

AppHelper.java

public class AppHelper {
    public static RequestQueue requestQueue;
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    TextView textView;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendRequest();

            }
        });

        if(AppHelper.requestQueue != null) {
            AppHelper.requestQueue = Volley.newRequestQueue(getApplicationContext());
        } //RequestQueue 생성
    }

    public void sendRequest() {
        String url = "https://www.google.co.kr";
        StringRequest request = new StringRequest(
                Request.Method.GET,
                url,
                new Response.Listener<String>() { //응답을 잘 받았을 때 이 메소드가 자동으로 호출
                    @Override
                    public void onResponse(String response) {
                        println("응답 -> " + response);
                    }
                },
                new Response.ErrorListener() { //에러 발생시 호출될 리스너 객체
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        println("에러 -> " + error.getMessage());
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<String,String>();

                return params;
            }
        };
        request.setShouldCache(false); //이전 결과 있어도 새로 요청하여 응답을 보여준다.
        AppHelper.requestQueue = Volley.newRequestQueue(this); // requestQueue 초기화 필수
        AppHelper.requestQueue.add(request);
        println("요청 보냄.");

    }
    
    public void println(String data) {
        textView.setText(data +"\n");
    }
}

예제 실행 결과

요청하기 버튼을 누르면 RequestQueue에 요청이 전달되고 Volley가 자동으로 웹서버에 Request를 전달하여 응답을 받아와 화면에 출력.

Reference : 안드로이드 부스트코스 - Volley 사용하기

post-custom-banner

0개의 댓글