2016-02-06 6 views
6

私はアンドロイドの開発者のサイトを参照して、シングルトンのクラスでVolley NetworkImageViewを作成しました。しかし、そのアプリケーションの強制終了後にキャッシュイメージを維持していないとオフラインで再び私のアプリを開きます。オフラインモードでキャッシュからイメージを取得するネットワークイメージビューを作成する方法。私はLruCacheを使用しています。オフラインモードで画像を表示するにはnetworkimageview?アプリケーションを終了してから再開しました。 Facebookのアプリのように

注:私は、アプリケーション全体でNetworkImageViewを使用しています。そして、私はどこかで、ディスクキャッシュは、イメージURLがキャッシュヘッダーである場合にのみ格納されると読んでいます。私はそのことを知りたいし、そのURLのヘッダーがない場合、どのようにイメージのディスクキャッシュを格納するようにバレーを強制するのでしょうか?

マイコード:

public class VolleySingletonPattern { 

private static VolleySingletonPattern mInstance; 
private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 
private static Context mCtx; 

private VolleySingletonPattern(Context context) { 
    mCtx = context; 
    mRequestQueue = getRequestQueue(); 

    mImageLoader = new ImageLoader(mRequestQueue, new LruBitmapCache(
      LruBitmapCache.getCacheSize(mCtx))); 
} 

public static synchronized VolleySingletonPattern getInstance(Context context) { 
    if (mInstance == null) { 
     mInstance = new VolleySingletonPattern(context); 
    } 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     // getApplicationContext() is key, it keeps you from leaking the 
     // Activity or BroadcastReceiver if someone passes one in. 
     mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); 
    } 
    return mRequestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req) { 
    getRequestQueue().add(req); 
} 

public ImageLoader getImageLoader() { 
    return mImageLoader; 
}} 

マイLruCache:

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; 
}} 
+0

私はNetworkImageViewがしたい(http://stackoverflow.com/questions/26560531/how-to-make-volley-networkimageview-worke-offline)[バレーボールNetworkImageViewのworkeオフラインの作り方] –

答えて

0

私はこのthisを使用している、と私のために働いています。 これらの権限を追加する必要があります。

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

の可能性のある重複オフラインで画像を読み込みます。これは、オフラインで閉じた後に再度開いた場合と同じです。私はfacebookがBitmapイメージを読み込むためにDiskCacheを使用する場所を読んだ。それがtrueで、DiskCacheがアプリケーションを閉じた後にオフラインでイメージをロードして再オープンした場合。次に、独自のDiskCacheを持つNetworkImageViewでそのDiskCacheを使用するにはどうすればいいですか? –

+0

私は上記のリンクを使用しており、一度ロードされていればオフラインでも動作しています。 –

+0

私は、アプリケーション全体でNetworkImageViewを使用しています。そして、私はどこかで、ディスクキャッシュは、イメージURLがキャッシュヘッダーである場合にのみ格納されると読んでいます。私はそのことを知りたいし、そのようなURLのヘッダーがない場合は、どのようにイメージのディスクキャッシュを格納するためにボレーを強制する。 –

関連する問題