我需要从某些服务加载和缓存图像。在示例中,没有这样的服务,但它显示了我想要实现的目标。
我的问题是图像没有缓存在磁盘上。没有通常的文件夹/数据/数据/ myapp / cache / picasso-cache。
如何从RequestHandler访问缓存。甚至可以或者编写自定义下载器会更好吗?
RequestHandler
public class CustomRequestHandler extends RequestHandler {
private static final List<String> PATHS = Arrays.asList("http://somelink/someimage1.png",
"http://somelink/someimage2.png",
"http://somelink/someimage3.png");
private Iterator<String> pathIterator = PATHS.iterator();
@Override
public boolean canHandleRequest(Request data) {
return data.uri.toString().contains("custom");
}
@Override
public Result load(Request request, int networkPolicy) throws IOException {
if (!pathIterator.hasNext()) {
pathIterator = PATHS.iterator();
}
Bitmap bitmap = downloadFullFromUrl(pathIterator.next());
Result result = new Result(bitmap, Picasso.LoadedFrom.NETWORK);
return result;
}
private static Bitmap downloadFullFromUrl(String imageFullURL) {
Bitmap bm = null;
try {
URL url = new URL(imageFullURL);
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0,
baf.toByteArray().length);
} catch (IOException e) {
Log.d("ImageManager", "Error: " + e);
}
return bm;
}
}
用法:
Picasso picasso = Picasso.Builder(application)
.addRequestHandler(requestHandler)
.build();
picasso.load("custom").into(imageView);
答案 0 :(得分:3)
正如@sashabelonogov所提到的,你需要将你的picasso实例与请求处理程序作为singeltone实例。我只是将它添加到我的Application类并在任何地方使用[2.0, 4.0]
来完成它。
Picasso.with(Context)
答案 1 :(得分:1)
你不应该宣布一些毕加索的例子。如果要使用自定义Picasso实例,请将其设置为Singleton。它对我有用。祝你好运!
另一条建议: 使用Downloader类(OkHttpDownloader.java或其他一些)代替downloadFullFromUrl()方法可能会更舒服。