【Android】Volleyで通信をしよう(ImageView編)

今回はVolleyでサーバ上の画像をImageViewにセットする方法を紹介します。

使用するメリット

ImageViewにURLを指定して勝手に表示って機能欲しいですよね?
ついでにキャッシュしてくれたりしたら最高だと思いませんか?
それが今回の記事です!!

ソースコード

build.gradleの設定
dependenciesに以下を記載

compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28'

Applicationの子クラスを用意

public class AppController extends Application {

    public RequestQueue mRequestQueue;
    public ImageLoader mImageLoader;

    @Override
    public void onCreate() {
        super.onCreate();
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        mImageLoader = new ImageLoader(mRequestQueue, new LruBitmapCache(getApplicationContext()));
    }
}

前回の記事では無かったImageLoaderと言う物が増えています。
画像の読み込みに必要なので、忘れずに記載してください

キャッシュのためのクラス
今回は何も考えずにVolleyの公式ページの物を使います。

public class LruBitmapCache extends LruCache<String, Bitmap>
        implements ImageCache {

    public LruBitmapCache(int maxSize) {
        super(maxSize);
    }

    public LruBitmapCache(Context ctx) {
        this(getCacheSize(ctx));
    }

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

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

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

    // Returns a cache size equal to approximately three screens worth of images.
    public static int getCacheSize(Context ctx) {
        final DisplayMetrics displayMetrics = ctx.getResources().
                getDisplayMetrics();
        final int screenWidth = displayMetrics.widthPixels;
        final int screenHeight = displayMetrics.heightPixels;
        // 4 bytes per pixel
        final int screenBytes = screenWidth * screenHeight * 4;

        return screenBytes * 3;
    }
}

実際の画像表示部分

    private void setImageUrl() {

        String url = "http://www.acrowavenet.com/wp/wp-content/themes/acrowavenet/images/common/header_logo.png";
        AppController app = (AppController)getApplication();

        image.setImageUrl(url, app.mImageLoader);
    }

Applicationクラスに書いたImageLoaderと画像のURLを指定すれば完了です。

記事で見ると長いですが、実際はそれほど大変ではないです。
また、表示部分以外は一度書けば使い回せるので一家に一台あってもいいかもしれません

今回のソースコード一式は以下にあります。
https://github.com/k-shimoju/android/tree/master/Volley(ImageView)