- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 for 循环中使用 Picasso 获取位图时遇到问题。
在第一次运行 时不会调用 onBitmapLoaded。
第二次运行它调用了
for (int i = 0; i < 3; i++) {
final int k=i;
Picasso.with(this)
.load(ListA.get(i).getImage()) //image
.resize(100, 100)
.transform(new ImageTrans_CircleTransform())
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.i("load", "Ok " + k);
//use bitmap for add marker to map
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.i("load", "first " + k);
}
});
}
日志
11-04 16:42:22.222 11677-11677/com.tenten I/load﹕ first___0
11-04 16:42:22.222 11677-11677/com.tenten I/load﹕ first___1
11-04 16:42:22.232 11677-11677/com.tenten I/load﹕ first___2
我使用 picasso 从列表图像中获取位图。
我需要位图而不是 ImageView 。
谢谢。 :D
最佳答案
使用 Picasso 的目标的一个常见问题是人们不会保留对它们的强引用。这会导致目标随机工作,因为有时它们会在完成之前被 GC 收集,有时它们会存活足够长的时间来调用回调。
您需要做的是将这些回调存储在某个地方,直到它们完成。这是一个例子:
final List<Target> targets = new ArrayList<Target>();
for (int i = 0; i < 3; i++) {
final int k=i;
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.i("Targets", "Loaded: " + k);
targets.remove(this);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
targets.remove(this);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.i("Targets", "Preparing: " + k);
}
}
targets.add(target);
Picasso.with(this)
.load(ListA.get(i).getImage()) // Start loading the current target
.resize(100, 100)
.into(target);
}
为确保列表不会也被 GC,请将 targets
设置为全局变量。
关于android - Picasso 第一次运行不在for循环中调用onBitmapLoaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518703/
在我的函数中: public void getPointMarkerFromUrl(final String url, final OnBitmapDescriptorRetrievedListene
onBitmapLoaded 有问题。该方法未在应调用时调用(它是我第二次进入 View 时调用的)。不过,我保留了对目标的引用,因为我将它添加到 arraylist。 我不明白为什么它不起作用。有人
我遇到了同样的问题,我想将 Picasso 生成的可绘制对象用于图像缓存目的,但我无法获得相同的结果。这是我用来访问位图可绘制对象的代码: Target targetBitmap = new Targ
下面的代码 fragment 用于将文件加载到位图中并将此文件保存在内部目录中(即 PNG 或 JPG 格式) final List targets = new ArrayList(); final
我是一名优秀的程序员,十分优秀!