이번 포스팅에서는 HTTP 통신 라이브러리 중
Volley에 대해 알아보자.
Volley란?
공식 문서 ↓
공식 깃허브 ↓
구글에서 만든 라이브러리이며 2013년도에 출시되었다.
공식 문서에서는 Volley를 다음과 같이 요약한다.
'안드로이드 앱을 위한 네트워킹을 더 쉽고 빠르게 만드는 HTTP 라이브러리'
RequestQueue에 Request를 추가시키는 방식으로 작동한다.
전형적인 Queue 방식이라 볼 수 있다.
또한 기본적으로 비동기 처리 방식을 지원한다.
사용해보기
✅ 의존성 추가
build.gradle(모듈 수준)에 다음 의존성을 추가해준다.
implementation 'com.android.volley:volley:1.2.1'
1.2.1 버전 이후로 최신 버전은 딱히 나오지 않을 것 같다.
(추후 업로드 하겠지만, Retrofit에 밀려났다)
✅ 기본 문법
기본적인 문법은 다음과 같다.
중요 부분마다 주석을 작성해 놓았으니 확인하기 바란다.
// 1) RequestQueue 초기화
RequestQueue queue = Volley.newRequestQueue(this);
// 2) Request 초기화
StringRequest stringRequest = new StringRequest(
'HTTP Method',
'요청 보낼 URL',
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 응답 성공 시 처리할 작업
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 응답 실패 시 처리할 작업
}
});
// 3) RequestQueue에 Request 추가
queue.add(stringRequest);
1) 먼저 RequestQueue를 초기화 해준다.
Volley.newRequestQueue() 메서드의 인수에는 Context를 넣어주면 된다.
2) 그리고 RequestQueue에 추가해줄 Request를 생성해준다.
Volley의 기본 요청 유형은 다음 3가지를 제공한다.
- 문자열 : StringRequest
- 이미지 : ImageRequest
- JSON : JsonArrayRequest / JsonObjectRequest
위 예제에서는 StringRequest를 사용하여 요청을 보내서
String 타입의 Response를 받는다.
첫 번째 인수에는 HTTP Method를 넣어주고
두 번째 인수에는 요청을 보낼 URL을 넣어준다.
세 번째 인수에는 응답을 받고 처리하는 Listener를 넣어주고,
네 번째 인수에는 응답을 성공적으로 받지 못했을 시 처리하는 Listener를 넣는다.
3) RequestQueue에 Requset를 추가해준다.
✅ 사용해 보자
서버에 간단한 php 파일을 만들고,
해당 URL로 요청을 보내서 응답을 확인해 보겠다.
위 문법에서 사용한 예제를 그대로 사용한다.
String url = "http://1.23.456.78/API_Test.php";
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(
Request.Method.GET,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, error);
}
});
queue.add(stringRequest);
문법 코드에서 Request 객체의 생성자 인수만 변경했다.
HTTP Method는 GET을 사용했고,
URL은 본인 서버에 있는 php파일 경로를 String으로 넣어주었다.
그리고 응답 성공·실패 시 로그를 찍어놓았다.
해당 php 파일은 다음과 같다.
단순히 요청·응답이 성공하면 위와 같은 문자열이 로그에 출력될 것이다.
결과는 다음과 같다.
응답이 잘 도착하였다.
✅ 요청 파라미터 추가하기
위에서는 GET 메서드로 요청 파라미터 없이 단순 요청만 보냈다.
이제 요청 파라미터를 추가하는 방법을 알아보자.
String url = "http://1.23.456.78/API_Test.php";
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(
Request.Method.POST,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, error);
}
})
// getParams() 메서드 오버라이딩
{
@Override
public Map<String,String> getParams() throws AuthFailureError {
// HashMap을 이용하여 파라미터 만들기
Map<String, String> params = new HashMap<>();
params.put("name", "Oscar");
params.put("age", "29살");
return params;
}
};
queue.add(stringRequest);
HTTP Method는 POST로 변경했고,
Request 초기화 마지막 부분에 getParams() 메서드를 추가해줬다.
HashMap을 이용하여 String 데이터를 담아 요청했다.
그리고 수정된 php 파일은 다음과 같다.
POST 데이터를 받아서 출력하는 것 뿐이다.
결과는 다음과 같다.
응답이 잘 도착했다.
✅ JSON 데이터 응답 받기
대부분의 API 응답은 JSON 형식으로 날아온다.
JSON으로 출력하도록 php 파일을 수정해준다.
Request 객체의 onResponse() 부분만 보겠다.
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String name = jsonObject.getString("name");
String age = jsonObject.getString("age");
Log.d(TAG, name + "는 " + age + "입니다.");
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
여기서는 Response를 String으로 받았기 때문에
응답 받은 response를 JSONObject로 파싱하면 된다.
JSON 형태에 따라 JSONArray를 사용해야 할 수도 있다.
결과는 다음과 같다.
Volley 라이브러리에 대해 간단히 알아보았다.
여담)
Volley는 구글에서 개발하고 출시하였다.
그리고 안드로이드도 구글에서 출시하고 유지·관리 중이다.
하지만 재미있는 점은, 안드로이드 공식문서에서는
Http 통신을 할 때 Volley가 아닌 Retrofit을 권장한다.
자기 회사에서 만든 기술을 자기 회사에 적용하지 않는다는 이야기다.
즉, Volley는 Retrofit에게 밀려났다고 볼 수 있다.
그리하여 이제 Volley가 자주 사용되지는 않는다.
종종 Volley가 Deprecated 되지 않았냐며 이야기하는 사람들도 있다.
그래도 나름 사용하기 간편하다고 느낀다.
다음 포스팅에서는 OkHttp 라이브러리에 대해 알아보겠다.
'Android (안드로이드)' 카테고리의 다른 글
[Android] HTTP 통신 라이브러리 - Retrofit / 예제 / 사용법 (4) | 2024.01.25 |
---|---|
[Android] HTTP 통신 라이브러리 - OkHttp / 예제 / 사용법 (2) | 2024.01.24 |
[Android] 플레이 스토어에 앱 출시하기 (2) - 앱 출시 과정 / 앱 출시 방법 / 출시 조건 (2) | 2024.01.22 |
[Android] 플레이 스토어에 앱 출시하기 (1) - 앱 출시 과정 속 시련 (0) | 2024.01.21 |
[Android] 리사이클러뷰 아이템 수정, 삭제 / 리사이클러뷰 아이템 클릭 이벤트 (0) | 2024.01.19 |