Picasso Upload Image to Target

I use Picasso to upload various images. Usually I just show them in ImageView , but in this situation I want to have a strong link for them so that I can use them in different places without accessing the cache or reloading them. Here is how I am trying to do this (note that there is more to this class - I just narrowed it down to the parts that are relevant to this question):

 public class MapLayer { private Context mContext; private String mType; private Drawable mIcon = null; public MapLayer (Context context, String type) { mContext = context; mType = type; downloadIcon(); } public Drawable getIcon() {return mIcon;} private void downloadIcon() { String url = mContext.getString(R.string.maps_icon_url).replace("${type}", mType)); Target target = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { Log.d(TAG, "on bitmap loaded"); mIcon = new BitmapDrawable(mContext.getResources(), bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { Log.d(TAG, "on bitmap failed"); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { Log.d(TAG, "on prepare load"); mIcon = placeHolderDrawable; } }; ImageDownloader.getSharedInstance().load(url).into(target); } } 

In each case, I get the output:

on prepare load

but nothing more. My icon is always zero. I know this from other classes where I call getIcon() .

What am I missing here? Thanks for any help.

+5
source share
2 answers

Picasso contains an instance of Target with a weak link, so your Target seems to be garbage collected.
see https://github.com/square/picasso/issues/352

Better to hold Target as an instance field.

 public class MapLayer { ... private Target target; private void downloadIcon() { ... target = new Target() { ... }; ImageDownloader.getSharedInstance().load(url).into(target); } } 
+6
source

This is because Picasso maintains a weak reference to the Target object.

If you want to have a strong link, I would recommend tagging Target for View .
Here is the solution for your problem .

+2
source

All Articles