UIL更新缓存的图像

时间:2015-04-29 04:45:32

标签: android universal-image-loader

我希望使用URL显示Facebook个人资料图片,但每当用户更改其个人资料图片时,此图书馆都不会更新缓存图片。

我的UIL版本是1.9.3,显示选项:

private Bitmap getBitmapFromPath(String path)
{     
    BitmapFactory.Options btmapOptions = new BitmapFactory.Options();

    btmapOptions.inSampleSize = 2;

    Bitmap bm = BitmapFactory.decodeFile(path, btmapOptions);

    return bm;
}

那么我应该如何检查网址中的图片是否发生了变化?或者您可能知道另一个具有此功能的库?

谢谢!

1 个答案:

答案 0 :(得分:0)

UIL具有多线程图像加载(异步或同步)。请参阅github上的图书馆功能。

您在光盘上启用缓存(设备的文件系统或SD卡).cacheOnDisk(true)。库从此缓存加载图像。禁用光盘缓存.cacheOnDisk(false)并在您的活动中编写以下代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {    
    super.onCreate(savedInstanceState);
    ...
    DisplayImageOptions displayOptions = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.ic_preview)
                .showImageForEmptyUri(R.drawable.ic_preview)
                .showImageOnFail(R.drawable.ic_preview)
                .cacheInMemory(true)
                .cacheOnDisc(false)
                .considerExifParams(true)
                .build();

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
                .writeDebugLogs()
                .defaultDisplayImageOptions(displayOptions)             
                .build();

    ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.init(config);

    AnimateFirstDisplayListener animate  = new AnimateFirstDisplayListener();

    imageLoader.displayImage(YourImageURL, userIv, animate);
    ...
}

public static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

    static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        if (loadedImage != null) {
            ImageView imageView = (ImageView) view;
            boolean firstDisplay = !displayedImages.contains(imageUri);
            if (firstDisplay) {
                FadeInBitmapDisplayer.animate(imageView, 500);
                displayedImages.add(imageUri);
            }
        }
    }
}