Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从毕加索的缓存中检索图像?_Android_Http_Caching_Storage_Picasso - Fatal编程技术网

Android 如何从毕加索的缓存中检索图像?

Android 如何从毕加索的缓存中检索图像?,android,http,caching,storage,picasso,Android,Http,Caching,Storage,Picasso,我正在使用毕加索库加载图像。默认情况下,毕加索使用内部缓存加载图像。但根据我的应用程序配置,我必须使用外部缓存(磁盘缓存)。 所以我用这个代码在磁盘上缓存 File httpCacheDir = new File(getApplicationContext().getExternalCacheDir(),"http"); long httpCacheSize = 10 * 1024 * 1024; // 10 MiB

我正在使用毕加索库加载图像。默认情况下,毕加索使用内部缓存加载图像。但根据我的应用程序配置,我必须使用外部缓存(磁盘缓存)。 所以我用这个代码在磁盘上缓存

              File httpCacheDir = new File(getApplicationContext().getExternalCacheDir(),"http");
                long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
               HttpResponseCache.install(httpCacheDir, httpCacheSize);}
毕加索很灵活。所以现在它在外部Sd卡中缓存图像

缓存存储在sdcard/android/data/packagename/cache/http中 缓存存储在“.1”和“.0”中。格式 所以我刚刚打开它们,并将其更改为“.1”到“.jpg”。它提供了我所需要的精确图像。
但如何在程序上做到这一点呢?但毕加索本身会将我的内存缓存到我的应用程序中,以便将图像加载到imageview。但我必须将它们直接作为图像保存到SD卡中/在脱机模式下将位图设置为墙纸?

毕加索会在其中处理缓存并下载,您只需将其放置在与Aquery类似的目标图像视图中即可


毕加索自行处理下载缓存,并将其处理程序交给用户使用,然后将图像放在图像视图中

您可以在构建
毕加索
实例时提供自己的
缓存
实现。通过这种方式,您可以提供额外的方法,可以调用这些方法直接从内存缓存中检索位图。使用
Picasso.Builder
为其提供您自己的实现。当您使用
with()
时,您使用的是一个静态单例内部实例,该实例使用了大多数默认值(大多数应用程序仍然需要默认值)

保留对
缓存
实现的引用,并直接与之交互。毕加索的本意是为您处理加载/解码和缓存,但您没有理由不能围绕它进行构建

如果你指的是磁盘缓存,那么毕加索目前不支持这一点。这是设计上的,因为磁盘层缓存是由HTTP层完成的,并且没有区别


但是,您可以更改磁盘缓存的路径。如果您使用的是OkHttpDownloader,那么在构建Downloader时提供一个不同的文件。类似地,对于UrlConnectionDownloader,您可以扩展它并重写
load()
method.

如果您已经获得了文件路径,并且非常确定文件存储以.0或.1结尾,那么只需获取文件名并将0或1替换为jpg@UsmanKurd文件名看起来像是用Md5哈希加密的。..40字以上。@AndroSelva用于将文件名保存到SD卡而无需再次下载或直接设置为壁纸。..Ur是的。你可以使用外部磁盘缓存。毕加索也很灵活。毕加索自己在ExtenalsdCard中创建缓存,并将其句柄交给用户使用并将图像放置在imageview中。但我想将它们从缓存中保存到SD卡辅助设备中。嘿,我的问题错了。SD卡内存/内部内存这不是问题,我不想从外部/直接访问缓存。我只想从毕加索本地访问。当图像加载到imageview时,我只想将图像保存到sd卡中。有可能吗?让我直截了当地说,您正在尝试更改文件的存储位置,而不是内部文件,您希望它们存储在SD卡中吗?您可以使用OkHttpDownloader,并在创建它时传入所需的cacheDir,或者如果使用UrlConnectionDownloader,则可以扩展它并实现类似于基类的load()方法。我正在更新我的回复。我正在制作在线图库应用程序,该应用程序有1000多张图片。该应用程序的功能包括“在主屏幕中设置为壁纸”和“保存到SD卡”。每当图像加载到imageview时,用户可以立即“将其设置为墙纸”或“保存2张SD卡”。因此,我想从缓存或任何其他方法访问位图。但创建新的缓存并检索它对我来说非常困难。我想访问毕加索api的内部。我已经试了一个星期了。请帮我解决。但是你可以为内存提供
缓存
实现,也可以为磁盘缓存访问提供
文件
。如果你把它们传给毕加索,你就没有理由不把它们放在身边,以便访问特定URL的位图。我看不出这里有什么问题,您也可以使用Picassos
get()
方法使用相同的键从缓存(内存或磁盘)同步加载位图,并将其保存到SD卡。我尝试过类似的方法,位图b=cache.get(Url)。但它不起作用。我不知道如何得到关键值。谢谢你的回复