我遇到了一个非常棘手的问题。我正在使用波纹管代码使用picasso加载位图:
final Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// loaded bitmap is here (bitmap)
Log.i(TAG, "bitmapLoaded");
imageView.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.i(TAG, "bitmapFailed");
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
imageView.setTag(target);
Picasso.with(this)
.load(photoUrl)
.into(target);
我知道很多关于毕加索没有加载图片的问题,因为参考不足但是我不认为是这样的,因为我已经按照许多主题中提出的解决方案来参考目标像上面一样。
在我的程序中,我在3个不同的类和3个不同的时刻使用相同的代码。我注意到的是,无论何时我第一次调用这种方法它都不起作用,但是对于下一次它起作用,与3个调用中的哪一个被使用并不重要。我可以这么说,因为我从这3种不同的方法中将不同的消息打印到日志中。
关于发生了什么或者我错过了什么的想法?
提前谢谢。
答案 0 :(得分:1)
尝试使用异步方法实现此目的。
Picasso.with(context).load(URL).into(profile, new Callback() {
@Override
public void onSuccess() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {//Use your "bitmap" here
Bitmap innerBitmap = ((BitmapDrawable) profile.getDrawable()).getBitmap();
}
}, 100);
}
您也可以尝试使用 Glide https://github.com/bumptech/glide
答案 1 :(得分:1)
问题:问题是Picasso对目标类的参考不足,并且 GARBAGE COLLECTED 。
解决方案:将其转换为类字段,而不是将其用作本地引用。