我正在尝试使用Picasso从网址加载多个位图,并绘制我在谷歌地图上加载的位图。
所有这些代码都在Google MapFragment
中。
public void drawLocations(final UserPictureUrl[] userPicsArray) {
for (int j = 0; j < userPicsArray.length; j++) {
Location targetLocation = ... // getting location
// userPicsArray[j].getPicUrl() is the bitmap url
loadProfilePicture(userPicsArray[j].getPicUrl(), targetLocation);
}
}
private void loadProfilePicture(String picUrl, final Location location) {
friendLoadTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Toast.makeText(getActivity(), String.valueOf(counter), Toast.LENGTH_SHORT).show();
counter++;
int width = 40;
int height = 40; getResources().getDimension(R.dimen.profile_height);
// drawCanvas draws the bitmap to the map
drawCanvas(location, Bitmap.createScaledBitmap(bitmap, width, height, false), picType);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(getActivity()).load(picUrl).into(friendLoadTarget);
}
我的问题 - 我要加载3位图,但在运行应用时,加载的行为是意外 - 有时它只加载1位图,有时候所有3,有时2,有时没有。
正如您所看到的,我放了一个Toast
来测试该方法是否实际被调用,而且我几乎从未获得所有3个Toast消息。有时只有一条消息带有&#34; 1&#34;这就是它..
如何确保所有图像都正确加载?
答案 0 :(得分:2)
Picasso
仅包含对Target
s的弱引用。当你在那里循环时,你正在丢失前两个引用。只要您想加载Target
s,就需要保留这些引用。