获取Android Universal Image Loader缓存/保存带文件扩展名的图像

时间:2014-04-02 08:26:48

标签: android image caching asynchronous universal-image-loader

我正在使用https://github.com/nostra13/Android-Universal-Image-Loader中的Android-Universal-Image-Loader来加载和缓存图像异步。我面临的问题是我想用图库打开图像或将它们发送给朋友。出于某种原因,我的图像被缓存而没有文件扩展名。

我正在使用当前配置

public static void initImageLoader(Context context) {

        File cacheDir = StorageUtils.getOwnCacheDirectory(context, CommonUtilities.APP_DIR);

        DisplayImageOptions options = new DisplayImageOptions.Builder()
        .cacheInMemory(true)
        .cacheOnDisc(true)
        .considerExifParams(true)
        .build();

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.MAX_PRIORITY)
                .discCacheExtraOptions(480, 800, CompressFormat.PNG, 75, null)
                .denyCacheImageMultipleSizesInMemory()
                .discCache(new UnlimitedDiscCache(cacheDir))
                .defaultDisplayImageOptions(options)
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                .build();

        // Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(config);
    }

希望任何人都可以帮助我!

2 个答案:

答案 0 :(得分:3)

创建自己的FileNameGenerator,它将生成最后带扩展名的文件名,然后将其设置为光盘缓存:

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
             ...
            .discCache(new UnlimitedDiscCache(cacheDir, myGenerator))
            ...
            .build();

答案 1 :(得分:1)

创建自定义文件名生成器

import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
import static java.lang.String.valueOf;

public class HashCodeFileNameWithDummyExtGenerator implements FileNameGenerator {
    @Override
    public String generate(String imageUri) {
        return valueOf(imageUri.hashCode()) + ".png";
    }
}

使用它

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    ...
    .diskCache(new UnlimitedDiskCache(cacheDir, null, new HashCodeFileNameWithDummyExtGenerator()))
    ...
    .build()