[android] Volley - Network & ImageLoading 라이브러리 ( google I/O 2013 )

android 2013. 5. 31. 14:32

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Google I/O 2013에서 volley 라는 새로운 라이브러리를 발표했습니다. 주요 역할은 Http통신 및 이미지 로딩을 해주는 것입니다.

 

주요 특징

* requestQueue를 이용한 동시요청 처리

* 요청 우선순위 설정 가능 ( A요청이 B요청보다 먼저 응답을 받아야 할 경우 )

* 요청 취소 기능 ( adapter 같은 곳에서 scrolling 이 빠른경우 응답이 않왔을때는 취소가 필요하죠. )

* android 하위 버전(2.3)에서 존재하던 HttpURLConnection의 버그 해결

* NetworkImageView 제공

 

Google I/O의 발표영상

 

 

초간단 사용법

 

// 초기화

mQueue = Volley.newRequestQueue(context);// thread pool(4)

            

mImageLoader = new ImageLoader(mQueue, new BitmapCache());

기본으로 4개의 thread pool을 사용하게 되어 있다. 

 

 

// requestQueue 이용

final ImageView imageView = (ImageView) findViewById(R.id.image_view);

 

// clear

imageView.setImageBitmap(null);

 

// start load

Listener<Bitmap> listener = new Listener<Bitmap>() {

@Override

public void onResponse(Bitmap result) {

imageView.setImageBitmap(result);

}

};

 

ErrorListener errorListener = new ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

       // error handling

       }

};

 

ImageRequest imageRequest = new ImageRequest(URL_IMAGE, listener, 0, 0, Config.ARGB_8888, errorListener);

imageRequest.setTag(TAG);

mQueue.add(imageRequest);

 ImageRequest를 생성해서 큐(queue)에 넣어주면 되는데, ImageRequest에  url과 성공, 실패시 처리할 리스터(listener)를 넘겨준다.

 

// NetworkImageView 이용

NetworkImageView imageView = (NetworkImageView) findViewById(R.id.network_image_view);

 

// clear

imageView.setImageUrl(null, null);

 

// start load

imageView.setImageUrl(URL_IMAGE, mImageLoader);

NetworkImageView는 정말 간단하다. 그냥 url 과 imageLoader만 넘겨주면 된다.  

 

// GET 호출 ( with parameter )

Listener<String> listener = new Listener<String>() {

                    @Override

                    public void onResponse(String result) {

                           // some action

                    }

             };

 

String uri = String.format("http://somesite.com/some_endpoint.php?param1=%1$s&param2=%2$s", num1, num2);

             StringRequest myReq = new StringRequest(Method.GET,

                    uri,

                    listener,

                    errorListener);

             mQueue.add(myReq);

GET 방식으로 이미지 호출이 아닌 api 호출해서 data를 받아 오는 경우도 흔하므로 위와 같이 StringRequest 이용해서 사용하면 된다. Parameter Get  방식이므로 url 전달하면 된다. ( Json 형식을 사용할땐, StringRequest 대신에 JsonRequest를 사용하면 된다. )

 

// POST 호출 ( with parameter )

StringRequest myReq = new StringRequest(Method.POST,

                    "http://somesite.com/some_endpoint.php",

                    listener,

                    errorListener) {

 

                    @Override

                    protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {

                           Map<String, String> params = new HashMap<String, String>();

                           params.put("param1", num1);

                           params.put("param2", num2);

                           return params;

                    };

             };

             mQueue.add(myReq);

Post로 호출할 경우에는 StringRequestgetParams() 함수를 overriding 해주면 된다. 리턴형식으로 Map<String, String>을 사용하므로 여러 개의 파라미터를 전달 할 수 있다.

 

 

<참고>

valley : https://android.googlesource.com/platform/frameworks/volley

샘플 : https://github.com/ogrebgr/android_volley_examples

 

 

 



: