개발/Android

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

Eun 2021. 5. 16. 17:22

 

안드로이드에서 웹서버에 데이터를 요청하고 응답할 때 HttpURLConnection 클래스를 사용한다.

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

안드로이드에서 제공하는 라이브러리 Volley를 사용하면 더 편하고 간단하게 HTTP 통신을 할 수 있다.

 

Volley

Volley는 웹 요청과 응답을 단순화하기 위해 만들어진 라이브러리 중 하나로서 그 중에서도 가장 많이 사용되는 라이브러리이다.

 

장점

  •  코드의 양이 줄고 빠르게 작업가능
  •  네트워크 요청의 자동 스케줄링
  •  여러 개의 동시 네트워크 연결
  •  요청의 우선순위 관리
  •  취소 요청 API
  •  강력한 정렬 기능을 이용해 네트워크에서 비동기적으로 가져온 데이터로 UI를 올바르게 채우는 작업을 실행

Volley API에서 제공하는 핵심클래스

  • RequestQueue: 서버 요청자. 다른 Request 클래스들의 정보대로 서버에 요청을 보내는 역할
  • StringRequest: 문자열을 결과로 받는 요청 정보
  • ImageRequest: 이미지를 결과로 받는 요청 정보
  • JsonObjectRequest: JSONObject를 결과로 받는 요청 정보
  • JsonArrayRequest: JSONArray를 결과로 받는 요청 정보

Volley 사용 방법

기본적인 구조는 Request 클래스를 이용한다.

 

1. Request 요청객체 만들기

2. Request 요청객체를 requestQueue(요청 큐)에 넣어주기

3. requestQueue(요청 큐)가 자동으로 웹 서버에 요청해주고 응답을 받는다.

4. request객체의 Listener에 응답처리하는 구현을 한다.

 

Volley를 이용한 HTTP 통신 과정

 

사용 예제

Volley API는 표준 라이브러리의 API가 아니므로 build.gradle 파일에 추가해야한다.

 

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

 

그리고 인터넷을 사용하므로 AndroidManifest.xml에 권한을 추가한다.

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

MainActivity.java 서버 요청하는 코드 작성을 한다.

StringRequest stringRequest = new StringRequest(...);
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(stringRequest);	//서버 연동 발생

add()함수에 Request 객체를 매개변수로 넣어주면 서버연동이 발생한다.

그리고 VolleyAPI를 이용하면 내부적으로 스레드-핸들러 구조로 동작하기 때문에 HttpURLConnection클래스보다 코드가 더 간단해진다는 얘기이다.

 

핵심클래스에서 언급한듯이 문자열 데이터를 얻어오기 위해 StringRequest를 사용하였다.

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) { //결과 처리 }
}, new Response.ErrorListener() {
	@Override
	public void onErrorResponse(VolleyError error) {
    //에러처리
	}
});

StringRequest 객체를 생성하면서 매개변수로 서버요청정보(GET, url)와 결과처리 콜백(Response.Listener)을 등록한다.

첫번재 매개변수는 HTTP Method로서 GET이나 POST로 지정.

두번째 매개변수는 서버 url 정보,

세번째 매개변수는 결과 콜백,

네번째 매개변수는 에러 콜백이다.

 

앞서 구현한 queue.add() 함수를 통해 서버에 요청을 보내고

서버로부터 응답을 잘 받았을 때 onResponse()가 호출된다. 그리고 에러 발생시 OnErrorResponse()가 호출된다.

 

또한, 서버로 데이터 요청시에 데이터를 같이 보내야할 때도 있다. 아래 코드를 참고해보자

StringRequest stringRequest = new StringRequest(...){

	@Override
	protected Map<String, String> getParams() throws AuthFailureError {
    	Map<String,String> params = new HashMap<String,String>();
        params.put("name",name);
        return params;
   	}
 };

getParams()함수를 재정의하여 서버에 전송할 데이터를 Map객체에 담아서 반환하면 된다.

이렇게 하면 RequestQueue에서 서버 요청 시 서버에 같이 전송된다.

 

Volley를 이용한 자세한 예제코드는 이곳으로 가면 확인할 수 있다.

 


참고

- Volley API를 이용한 HTTP 통신

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