2017-04-13 107 views
-1

我有一个observable异步加载一个图像与filePath不同,我想缓存位图变量。我试图添加一个.cache方法,但它没有帮助。如何在ma case中完成缓存?用RXJava缓存可观察。 Android

Observable.fromCallable(() -> { 
    File outputFile = new File(filePath); 
    Bitmap bitmap = decodeSampledBitmapFromUrl(newTAG, width, height); 
    return bitmap; 
}) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(bitmap -> { 
        mImageView.setImageBitmap(bitmap); 
       }, 
       throwable -> { 
        //handle it 
       }); 
+0

您需要在某处存储位图。或者可能使用像glide或picasso这样的好图像缓存库。如果要在屏幕旋转更改(订阅和取消排序)期间继续网络操作以防止再次发生网络呼叫,则缓存有用。 https://github.com/anupcowkur/MVPSample/blob/master/app/src/main/java/com/anupcowkur/mvpsample/model/PostsAPI.java – Raghunandan

+0

我以为RXJava拥有简单的缓存方法“from box” – Rainmaker

+0

它拥有,但是你需要在调用'cache'后存储可观察的引用。 – Than

回答

2

使用GlidePicasso及其内置缓存功能,并考虑使用WeakReferences来存储这样的位图。

0

你的意思是在你显示的代码之后使用位图变量吗?如果你不使用它,你应该拨打Bitmap.recycler()