gpt4 book ai didi

android - Picasso 将图像加载到目标中

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:56 26 4
gpt4 key购买 nike

我正在使用 Picasso 下载各种图像。通常,我只是在 ImageView 中显示它们,但在这种情况下,我想对它们进行强引用,这样我就可以在不同的地方使用它们,而不必返回缓存或重新引用下载它们。以下是我尝试这样做的方式(请注意,此类还有更多内容 - 我只是将其缩小到与此问题相关的部分):

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);
}
}

在每种情况下,我都会得到输出:

准备加载

但没有别的。我的图标总是空的。我从调用 getIcon() 的其他类中了解到这一点。

我在这里错过了什么?感谢您的帮助。

最佳答案

Picasso 拥有弱引用的 Target 实例,所以你的 Target 似乎被垃圾收集了。
参见:https://github.com/square/picasso/issues/352

最好将 Target 作为实例字段。

public class MapLayer {

...

private Target target;

private void downloadIcon() {

...

target = new Target() {
...
};

ImageDownloader.getSharedInstance().load(url).into(target);
}
}

关于android - Picasso 将图像加载到目标中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com