2016-02-06 7 views
6

ho fatto riferimento al sito degli sviluppatori Android e ho creato il volley NetworkImageView con classe singleton. Ma non mantiene l'immagine cache dopo la chiusura forzata dell'app e apre nuovamente la mia app offline. come rendere la vista dell'immagine di rete per ottenere l'immagine dalla cache in modalità offline. Sto usando LruCache.networkimageview per visualizzare l'immagine in modalità offline? dopo aver ucciso l'applicazione e riaperta. Come l'app di Facebook

NOTA: utilizzo NetworkImageView in tutta l'app. E ho letto da qualche parte che la cache del disco verrà memorizzata solo quando l'URL dell'immagine consiste nell'intestazione della cache. Voglio sapere a tale proposito e anche se nessuna intestazione nell'URL come quella poi come forzare la scarica per memorizzare la cache del disco dell'immagine?

Il mio codice:

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

mio 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

Eventuali duplicati di [Come fare Volley NetworkImageView worke offline] (http://stackoverflow.com/questions/26560531/how-to-make-volley-networkimageview-worke-offline) –

risposta

0

ho usato questo this, e sta lavorando per me. È necessario aggiungere questa autorizzazione.

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

voglio NetworkImageView a caricare le immagini offline, proprio come ha fatto l'app di Facebook dopo la chiusura e la riapertura offline. Ho letto da qualche parte che Facebook utilizza DiskCache per caricare immagini bitmap. Se è vero e DiskCache carica le immagini in modalità offline dopo aver chiuso l'app e riaperto. Allora come posso usare quel DiskCache nel mio NetworkImageView che ha il suo DiskCache. –

+0

Ho usato il link qui sopra e funziona anche offline, se è caricato una volta. –

+0

Uso NetworkImageView in tutta l'app. E ho letto da qualche parte che la cache del disco verrà memorizzata solo quando l'URL dell'immagine consiste nell'intestazione della cache. Voglio sapere su questo e anche se nessuna intestazione nell'URL come quella poi come forzare la scarica per memorizzare la cache del disco dell'immagine. –

Problemi correlati