Volley에서 newRequestQueue를 Deprecated시켰다고 한다
728x90
반응형

최근에 volley를 1.1.1로 업데이트를 했더랬다.

그러고 얼마지나지 않아 아래와 같은 이슈가 터졌다.

Caused by java.lang.NullPointerException: 
Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.Request.setRequestQueue(com.android.volley.RequestQueue)' on a null object reference

발생 지점을 확인해보니 Deprecated된 newRequestQueue를 사용하고 있었다. 그렇다면 RequestQueue가 무엇일까? document에서는 아래와 같이 설명을 하고 있다.

 

public class RequestQueue

A request dispatch queue with a thread pool of dispatchers.

Calling add(Request) will enqueue the given Request for dispatch, resolving from either cache or network on a worker thread, and then delivering a parsed response on the main thread.

 

그렇다. 우리에게 영어는 쥐약(찍)이다. 좀 알아먹기 쉽게(직독직해라고 하지요) 풀어보자면... "요청 전파 큐". ㅋ

Dispatch queue라고 iOS 개념이 있지만 그것과는 다를거 같다. 요청을 어딘가로 보내기 전에 담을 그릇이 RequestQueue라고 보면 될 것이다. 그래서 캐시 설정같은 것이 있는게 아닐까 싶다. Dispatch라는 의미를 잘 이해못해서 참 많이도 찾아봤는데 역시 선배 개발자 블로거들이 설명을 잘해놓았다.

 

개념은 이정도로 알아두고 문제점을 다시 바라보자. Deprecated된 newRequestQueue 대신에 무엇을 어떻게 쓰면 될까? RequestQueue를 세팅하는 이슈이기에 document에서 그 부분을 설정하는 것을 참고하였다.

// Instantiate the cache
Cache cache = new DiskBasedCache(getContext().getCacheDir(), 1024 * 1024);

// Set up the network to use HttpURLConnection as the HTTP client.
Network network = new BasicNetwork(new HurlStack());

// Instantiate the RequestQueue with the cache and network.
requestQueue = new RequestQueue(cache, network);

// Start the queue
requestQueue.start();

이 방법이 정답이 아닐 수 있다. 위 코드로 수정하고 난 뒤 해당 이슈는 막은 것으로 보이지만 다른 이슈가 터져서 혹시 여기서 생겨난 나비효과가 아닐까 의심하는 중이다. 그래도 이 포스팅을 보는 분에게 어떤 힌트가 되길 바란다.

728x90
반응형