Android 如何使用通用映像加载器脱机缓存?
是否可以使用通用映像加载程序捕获脱机映像? 如果可能,如何使用它? 使用配置? 如何手动设置下载目录 加载大型图像时内存不足错误: 我的代码:Android 如何使用通用映像加载器脱机缓存?,android,universal-image-loader,offline-caching,Android,Universal Image Loader,Offline Caching,是否可以使用通用映像加载程序捕获脱机映像? 如果可能,如何使用它? 使用配置? 如何手动设置下载目录 加载大型图像时内存不足错误: 我的代码: DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheOnDisc(true).cacheInMemory(true) .imageScaleType(ImageScaleType.IN_SAMPLE_INT
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(G.appConfigs.context)
.defaultDisplayImageOptions(defaultOptions)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.diskCacheExtraOptions(480, 800, null)
.memoryCache(new WeakMemoryCache())
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(300 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
// END - UNIVERSAL IMAGE LOADER SETUP
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.no_pic)
.showImageOnFail(R.drawable.load_failed)
.showImageOnLoading(R.drawable.img_thumb).build();
//download and display image from url
imageLoader.displayImage(imgURL, img, options);
如何解决此问题?您可以使用该类自定义磁盘缓存。这包括以下方法:
diskCacheExtraOptions()
(以字节为单位)diskCacheSize()
diskCacheFileCount()
diskCacheFileNameGenerator()
- 还有其他一些
diskCache(diskCache)
提供一个自定义类来实现脱机缓存
根据中的示例:
但是,如果您重新启动设备或以任何方式清理缓存,它将不会脱机工作,因为缓存的文件将被删除。
要显示脱机图像,您必须将sd卡上的图像下载到特定文件夹中,并从中进行选择,以防脱机。对此类库了解不多。但您可以使用以下方法下载图像。 只需从异步调用它。任务并传递您的url
private File root = Environment.getExternalStorageDirectory();
private File dir = new File(root.getAbsolutePath() + "/ImageFolder");
private void downloadFile(String url) throws Exception {
URL ur = new URL(url);
String fileName = url.substring(url.lastIndexOf("/") + 1);
File file = new File(dir, fileName);
URLConnection uconn = ur.openConnection();
InputStream is = uconn.getInputStream();
BufferedInputStream bufferinstream = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bufferinstream.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
}
通用图像加载器是一个完美的库加载异步您的图像。 您可以使用@matiash answer设置库配置,然后使用
ImageLoader.getInstance().init(config);
您可以将它们应用于ImageLoader实例。
之后,如果您在应用程序开始时已连接internet,则Universal Image Loader将下载并缓存您的所有图像,并将其缓存在您使用Universal Image Loader library加载这些图像的位置。下次加载相同的图像时,Universal Image Loader将从缓存中获取它们,这意味着您不需要任何internet连接(可以脱机工作)。
当有人安装你的应用程序并试图第一次使用它时,如果他没有互联网连接,问题就出现了。然后,Universal Image Loader将尝试从web服务器加载图像并将其缓存到存储器中,但它将失败,因为您没有internet连接。这就是为什么Universal Image Loader有一个类似DisplayImageOptions的类:
new DisplayImageOptions.Builder()
它允许您设置在加载图像时出现问题时应该发生什么。为此,您可以使用以下方法:
.showImageOnLoading(R.drawable.default_image)
.showImageForEmptyUri(R.drawable.default_image)
.showImageOnFail(R.drawable.default_image)
下面是一个如何使用它的示例:
DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
.showImageOnLoading(getImageLoaderDefaultImage())
.showImageForEmptyUri(getImageLoaderDefaultImage())
.showImageOnFail(getImageLoaderDefaultImage())
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.build();
方法getImageLoaderDefaultImage():
下面是当您要加载图像时如何使用图像加载程序:
ImageLoader.getInstance().displayImage("image url", myImageView,imageOptions);
如果您使用的是Xamarin:在OnCreateView中添加以下代码,Java中也提供了类似的代码
DisplayImageOptions options = new DisplayImageOptions.Builder().CacheInMemory(true).CacheOnDisk(true).Build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.Context).DefaultDisplayImageOptions(options).Build();
ImageLoader.Instance.Init(config);
加载图像时,在代码行下方添加
ImageLoader imageLoader = ImageLoader.Instance;
imageLoader.DisplayImage(imgURL, imageSource);
所以它离线显示图像?非常感谢,如果我关闭应用程序,然后重新启动,它还会保留缓存的图像吗?它们是使用通用图像加载器保存它们的一种方式吗?@ShobhitPuri这就是此功能的目的。太好了!非常感谢。我如何才能到达图像本地路径?你的意思是说,如果按照@matiash提到的过程操作,图像将在重新启动时被删除。啊!我不知道。这意味着,
通用图像加载器
不能用于离线存储图像。你知道有什么图书馆可以简化这一点吗。另一方面,我必须使用AsyncTask并从所有URL下载图像,然后将其存储在数据库或SD卡上的某个位置。我认为一个库会使这更容易。我想在listview或gridview中使用它,我知道下载方法,我以前也做过,但我想用最简单的方法来解决它。你需要一个永久缓存(脱机支持)。?或者只是想做一个懒散的加载。?
DisplayImageOptions options = new DisplayImageOptions.Builder().CacheInMemory(true).CacheOnDisk(true).Build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.Context).DefaultDisplayImageOptions(options).Build();
ImageLoader.Instance.Init(config);
ImageLoader imageLoader = ImageLoader.Instance;
imageLoader.DisplayImage(imgURL, imageSource);