2014년 2월 7일 금요일

Volley 간단 사용법

- 초기화
Volley에서 주로 사용자가 접하는 2개의 클래스는 RequestQueue와 Request 인데, RequestQueue는 request를 네트워크에 던지는 인터페이스이다.
RequestQueue는 필요에 따라 만들수도 있지만, 보통 singleton으로 사용한다.
기본으로 4개의 thread pool을 사용하게 되어 있다.

RequestQueue mRequestQueue = Volley.newRequestQueue(context);    //threadpool(4)
ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());



- RequestQueue 이용
ImageRequest를 생성해서 mRequestQueue 에 넣어주면 되는데, ImageRequest에  url과 성공, 실패시에 리턴은 설정한 listener 에서 받아서 처리한다.

ImageRequest imageRequest = new ImageRequest(URL_IMAGE, listener, 0, 0, Config.ARGB_8888, errorListener);
imageRequest.setTag(TAG);
mRequestQueue.add(imageRequest);

이미지 요청을 view holder에 저장해놓고, View를 재활용해야할 때는 요청을 취소한다.
Volley toolbox에 있는 ImageLoader가 나머지를 처리한다.
메모리 캐쉬를 제공하고, 로딩 중일때, 에러일때 표시될 drawable 자원 이미지를 지정할 수도 있다.

if (holder.imageRequest != null) {
    holder.imageRequest.cancel();
}
holder.imageRequest = mImageLoader.get(BASE_URL, holder.imageView, R.drawable.loading. R.drawable.error);


- NetworkImageView 이용
Layout 설정 파일에 ImageVIew 선언대신 NetworkImageView를 지정하고 ImageView 객체에 간단히 url과 imageLoader만 넘겨주면 된다.

NetworkImageView imageView = (NetworkImageView) findViewById(R.id.network_image_view);
imageView.setImageUrl(null, null);                                //clear
imageView.setImageUrl(URL_IMAGE, mImageLoader);    //start load

- BitmapLruCashe 예

public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {
    public static int getDefaultLruCacheSize() {
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        final int cacheSize = maxMemory / 8;
        return cacheSize;
    }

    public BitmapLruCache() {
        this(getDefaultLruCacheSize());
    }

    public BitmapLruCache(int sizeInKiloBytes) {
        super(sizeInKiloBytes);
    }

    @Override
    protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight() / 1024;
    }

    @Override
    public Bitmap getBitmap(String url) {
        return get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        put(url, bitmap);
    }

}


댓글 없음: