Volley 라이브러리를 사용할 때의 가장 큰 장점은 스레드를 신경 쓰지 않아도 된다는 것입니다.
Volley가 가지는 몇 가지 장점들은 다음과 같습니다.
- 네트워크 요청(Request) 우선 순위를 자동으로 관리한다.
- 동시에 여러 네트워크 요청을 할 수 있다.
- 요청을 할 때 Cache 적용 여부를 의식하지 않아도 된다.
요청 큐가 내부에서 스레드를 만들고 웹서버에 요청하고 응답을 받고 나면 메인 스레드에서 결과를 처리할 수 있도록 만든 후 여러분이 설정한 리스너의 메소드를 호출해줍니다.
따라서 화면에 결과를 표시할 때 핸들러를 사용하지 않아도 됩니다.
Volley 사용하기
Volley는 외부 라이브러리이므로 build.gradle(Module: app) 파일을 열고 dependencies 중괄호 안에 라이브러리 정보를 추가해줍니다.
implementation 'com.android.volley:volley:1.1.0'
라이브러리를 사용할 준비가 되면 AndroidManifest.xml 파일 안에 인터넷 권한을 추가하는 일도 잊지 않고 해줍니다.
<uses-permission android:name="android.permission.INTERNET" />
사용자가 버튼을 클릭했을 때 요청 객체를 만들고 요청 큐에 넣어줍니다.
요청 객체는 다음과 같이 StringRequest 클래스를 이용해 만들 수 있습니다.
문자열을 주고받기 위해 사용하는 요청 객체이며 Volley 라이브러리 안에는 이외에도 다른 유형의 요청 객체가 몇 가지 제공됩니다.
일반적으로는 StringRequest 클래스만으로도 충분합니다.
StringRequest request = new StringRequest(
Request.Method.GET,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
println("응답 -> " + response);
processResponse(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;
}
};
요청 객체를 new 연산자로 만들 때는 네 개의 파라미터를 전달할 수 있습니다.
첫 번째 파라미터로는 GET 또는 POST 메소드를 전달합니다. 요청 방식을 지정하는 것이죠.
두 번째 파라미터로는 웹서버의 URL 정보를 전달합니다.
세 번째는 리스너 객체인데 응답을 성공적으로 받았을 때 이 리스너의 onResponse 메소드를 자동으로 호출해줍니다.
네 번째는 에러가 발생했을 때 호출될 리스너 객체입니다.
만약 POST 방식에서 전달할 요청 파라미터가 있다면 getParams 메소드에서 반환하는 HashMap 객체에 넣어줍니다.
이렇게 만든 요청 객체는 요청 큐에 넣어주는 것만 해주면 됩니다.
AppHelper.requestQueue.add(request);
요청 큐는 앱이 시작되었을 때 초기화되어 있기만 하면 되고 한 번 만들어두면 계속 사용할 수 있습니다.
따라서 Application 클래스를 정의하고 앱에 등록하여 사용하는 경우에는 이 Application 클래스 안에 넣어둘 수도 있고 AppHelper와 같은 별도의 클래스를 만들어 그 안에 넣어둘 수도 있습니다.
AppHelper 클래스 안에는 static 키워드를 이용해 앱의 어느 곳에서도 접근할 수 있도록 만들어줍니다.
public class AppHelper {
public static RequestQueue requestQueue;
}
응답 받은 데이터가 정상적으로 화면에 보이나요?
최근댓글