java - Picasso multiImage downloader get " target got garbage collected" -
i try make cache on code using flickr api want download image once try create custom picasso helper download image in request garbage collection error
when loop item
public class picassohelper {
public static picasso mypicasso; private static final string tag = "picassohelper"; public static void init(context context){ picassohelper.mypicasso = picasso.with(context); } public static class downloadtarget implements target { public string filename; public runnable onbitmaploaded; public runnable onbitmapfailed; @override public void onbitmaploaded(bitmap bitmap, picasso.loadedfrom from) { log.i(tag, "onbitmaploaded"); searchactivity.protectedfromgarbagecollectortargets.remove(this); try { file picfile = new file(filehelper.getappexternaldir(), filename); if(picfile.exists()){ picfile.delete(); } picfile.createnewfile(); fileoutputstream out = new fileoutputstream(picfile); bitmap.compress(bitmap.compressformat.jpeg, 100, out); out.flush(); out.close(); onbitmaploaded.run(); } catch (ioexception e) { e.printstacktrace(); onbitmapfailed.run(); } } @override public void onbitmapfailed(drawable errordrawable) { searchactivity.protectedfromgarbagecollectortargets.remove(this); onbitmapfailed.run(); } @override public void onprepareload(drawable placeholderdrawable) { } }
}
i used download multi photo download
then in main activity
private void photoitempicassodownloader(list<photoitem> photoitems) { (photoitem photoitem: photoitems) { adapter.picstatuslist.put(photoitem.getid(), photostate.pic_status_loading); } log.i("done", "pic_status_loading"); adapter.notifydatasetchanged(); ( photoitem photoitem : photoitems) { final photoitem item = photoitem; picassohelper.downloadtarget target = new picassohelper.downloadtarget(); target.filename = photoitem.getid() + ".jpg"; target.onbitmaploaded = new runnable(){ @override public void run() { adapter.picstatuslist.put(item.getid(),photostate.pic_status_saved); log.i("done", "pic_status_saved"); adapter.notifydatasetchanged(); } }; target.onbitmapfailed = new runnable() { @override public void run() { adapter.picstatuslist.put(item.getid(),photostate.pic_status_fail); log.i("failed", "pic_status_fail"); adapter.notifydatasetchanged(); } }; mypicasso.load(photoitem.getgeturl()).tag(this).into(target); } }
onbitmaploaded not called @ although , log
"d/picasso: main canceled [r28]+212ms target got garbage collected"
Comments
Post a Comment