android - 用Picasso问题加载多个位图

时间:2016-02-09 11:47:33

标签: android asynchronous bitmap picasso android-bitmap

我正在尝试使用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;这就是它..

如何确保所有图像都正确加载?

1 个答案:

答案 0 :(得分:2)

Picasso仅包含对Target s的弱引用。当你在那里循环时,你正在丢失前两个引用。只要您想加载Target s,就需要保留这些引用。