我正在使用Picasso在我的Android应用中检索和显示图像。为了避免通过网络下载所有图像,我试图用apk文件添加一些图像,作为一组预先缓存的图像。这些图像存储在assets文件夹中,然后在安装时复制到Picasso缓存文件夹。这可以按预期工作,但毕加索仍然通过网络下载所有图像并将其缓存为.0
和.1
这样的文件:
root@generic_x86:/data/data/com.my.app/files/images_cache #
ls
10.JPG
100.JPG
101.JPG
102.JPG
11.JPG
1f94664dec9a8c205b7dc50f8a6f3b79.0
1f94664dec9a8c205b7dc50f8a6f3b79.1
2.JPG
4621206beccad87a0fc01df2d080c644.0
4621206beccad87a0fc01df2d080c644.1
*.JPG
图像是我复制的图像,其他图像是Picasso缓存图像。有没有办法让Picasso在安装时正确缓存这些图像?
如果没有,是否还有其他类似的库支持这种预缓存?
我尝试制作一个在应用程序首次运行时运行的小片段。我们的想法是迭代给定资产文件夹中的文件并使用Picasso获取这些图像。但是,下面的内容不会缓存任何内容,尽管我最终会使用回调的onSuccess()
方法。资产文件名是正确的。这也通过使用错误的文件夹名称进行验证,这使我处于回调的onError()
方法中。
我也尝试将其加载到临时ImageView
中,但它确实有所不同。
public static boolean cacheImagesFromAssetsFolder(Context context)
{
boolean ok = false;
try
{
String[] images = context.getAssets().list("my_images");
for (String image : images)
{
Picasso.with(context).load("file:///android_asset/my_images/" + image).fetch(new Callback()
{
@Override
public void onSuccess()
{
// This is where I end up. Success, but nothing happens.
}
@Override
public void onError()
{
}
});
}
ok = true;
}
catch (Exception e)
{
e.printStackTrace();
}
return ok;
}
答案 0 :(得分:0)
您可以使用文件URI请求Picasso从您的资产位置而不是n / w中选择图像。
Picasso.with(activity) //
.load(Uri.fromFile(file)) // Location of the image from asset folder
更新:如何使用自己的缓存
import com.squareup.picasso.LruCache;
import com.squareup.picasso.Util;
LruCache imageCache = new LruCache(context);
Request request = Request.Builder(Uri.fromFile(asset_file), 0, null).build();
String cacheKey = Util.createKey(request, new StringBuilder());
imageCache.set(cacheKey, bitmap_object_of_asset_image);
Picasso.Builder(context)
.memoryCache(imageCache)
.build().load(asset_url).fetch(callback);