I need to load and cache images from some service. In example there is no such a service but it shows what I want to achieve.
My problem is that images aren't cached on disk. There is no usual folder /data/data/myapp/cache/picasso-cache.
How can I access cache from RequestHandler. It is even possible or it will be better to write custom Downloader?
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;
}
}
Usage:
Picasso picasso = Picasso.Builder(application)
.addRequestHandler(requestHandler)
.build();
picasso.load("custom").into(imageView);
Aucun commentaire:
Enregistrer un commentaire