본문 바로가기

Android/꼭 공부해야 할 라이브러리

[웹에서 데이터 가져오기] 2. Volley

1. 개요

Volley는 안드로이드 앱에서 네트워킹을 더 쉽고 더 빠르게 하는 HTTP 라이브러리입니다. 이 라이브러리는 웹 요청과 응답을 단순화해줍니다.

2. 사용법

먼저 Request 객체를 만들고, 이 객체를 RequestQueue에 넣어줍니다.
그러면 RequestQueue가 알아서 스레드를 생성하여 서버에 요청하고 응답을 받아줍니다.
응답이 오면 RequestQueue에서 Request에 등록된 ResponseListener로 응답을 전달해줍니다.
또한 만일 응답을 받았을 때 처리할 메서드를 만들었다면 응답이 왔을 때 그 메서드가 자동으로 호출됩니다.
따라서 사용자는 별도의 스레드 관리뿐 아니라 UI 접근을 위한 Handler를 다룰 필요도 없습니다.

3. 예시

아래 코드를 통해 자세한 사용법을 알아보겠습니다.

1) RequestQueue 객체 생성

이 객체를 생성합니다. 이때 RequestQueue 객체를 어디서든 접근할 수 있도록 동반자 객체 안에 넣습니다.(java로 따지면 static으로 선언합니다.)

companion object {
        var requestQueue: RequestQueue? = null
}
...
// onCreate() 메서드 내부
requestQueue = Volley.newRequestQueue(applicationContext)



이후 onCreate() 메서드에서 초기화해줍니다.

2) 응답 요청하기

fun findMovieCode(movieName: String, item: Item) {
        val url = "https://kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.json?key=${kobisApiKey}&movieNm=${movieName}"
        val request = object: StringRequest(
            Request.Method.GET,
            url,
            {
          processResponseCustom(it, item, movieName)
            },
            {
                Log.e("Error", "오류 발생 -> ${it.message}")
            }
        ) {}
        request.setShouldCache(false)
        requestQueue?.add(request)
    }


영화 이름으로 영화 정보를 검색하는 메서드를 구현하면서 응답을 요청하는 부분에 대해 알아보겠습니다.

1) 요청 객체로 StringRequest 객체를 만들어줍니다.

이때 네 개의 파라미터가 필요하며, 자세한 설명은 다음과 같습니다.

a. 요청 방식

GET, POST 등의 요청 방식을 설정합니다. 저는 GET 방식을 사용했습니다.

b. 요청을 보낼 주소

url 변수를 전달합니다. 저는 영화진흥위원회에서 영화 이름으로 정보를 찾는 주소를 사용했습니다.

c. 응답이 왔을 때 처리할 람다식

processResponseCustom()이라는 메서드를 호출하도록 했습니다. 이 부분은 GSON을 다루면서 자세히 다루겠습니다.

d. 에러가 발생했을 때 호출될 람다식

저는 로그에 표시를 하도록 설정했습니다.

e. 요청 파라미터

끝에 {}에는 요청을 보낼 때 포함시킬 요청 파라미터를 넣을 수 있습니다.
그러나 현재 웹서비스 요청에는 필요하지 않으므로 전 생략했습니다.

그럼에도 공부를 위해 이 부분에 대한 내용을 작성하자면, 다음 코드와 같습니다.

{
override fun getParams(): MutableMap<String, String> {
val params = HashMap<String, String>()
params["id"] = "creative"
return params
}
}



이 경우 id라는 이름의 요청 파라미터가 전달됩니다.

2) setShouldCache()

이 메서드를 호출하면 캐싱을 할지 여부를 설정할 수 있습니다.

캐싱은 이미 받은 응답이 있을 경우 재사용할 수 있도록 하는 것이며, 저는 false로 설정했습니다.

3) 요청 객체 추가

RequestQuq 객체에 요청 객체 request 변수를 추가합니다. 이때 RequestQueue의 값이 null일 수 있으므로 뒤에?를 붙여줍니다.

4. 마무리

이번 시간에는 Volley 라이브러리를 사용하는 방법에 대해 간단히 알아보았습니다.

다음 시간에는 GSON 라이브러리를 사용해 JSON 문자열을 적절하게 처리하는 것에 대해서 알아보겠습니다.

728x90
반응형