Android 5.0中使用Picasso库时,图片无法加载

8

我正在开发一个演示应用程序,使用的是Picasso库v2.5.2。在所有Android操作系统版本上都可以正常工作,但在Lollipop上无法工作。

大小为130KB的图片对我来说无法加载。大小较小的图像可以正确加载。

以下是我的代码,用于下载位图并将其设置在ImageView上:

target = new Target() {
    @Override
    public void onPrepareLoad(Drawable drawable) {}

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
        if(bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {}
};

Picasso.with(this).load(URL).into(target);

我不确定我需要做哪些额外的事情,以便它也可以在棒棒糖上运行,或者这是库中的错误?

3个回答

14

这是一个已知的问题。问题在于Picasso为Target保留了一个弱引用。要让它正常工作,您需要将它设置为强引用,例如通过将Target存储为视图的标记。

target = new Target() {
    @Override
    public void onPrepareLoad(Drawable drawable) {}

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
        if(bitmap != null) {
            imageView.setImageBitmap(bitmap);
        }
    }

    @Override
    public void onBitmapFailed(Drawable drawable) {}
    };

imageView.setTag(target);
Picasso.with(this).load(URL).into((Target) imageView.getTag());

编辑:

我建议您使用Glide,它与Picasso非常相似,而且被Google推荐。正如您可以在此线程的末尾看到的那样,原始开发人员通过使用额外的缓冲区来解决这个BitmapFactory的问题。


我不确定需要做哪些更改。我正在使用Picasso库。如何解决这个问题。你能否分享一小段相关的代码? - N Sharma
我也尝试了Glide,但仍然遇到了同样的问题:( - N Sharma
Picasso在设置目标时仍无法正常工作,而Glide对我来说完美运行。 - Neela

0

如果你只需要将图像加载到ImageView中,为什么要使用Target呢?只需使用以下代码:

    Picasso.with(this).load(URL).into(imageView, new Callback()
    {
        @Override
        public void onSuccess()
        {
            //Dimiss progress dialog here
        }

        @Override
        public void onError()
        {
            //And here
        }
    });

如需文档,请查看此处


@Williams 看看我的编辑。你可以使用“回调函数”来实现。如果你真的需要使用,我建议你使用“目标函数”。 - Kevin van Mierlo
好的,谢谢。我会尝试这个并且会向你更新。 - N Sharma
@Williams,有什么问题?我今天在Lollipop上刚刚使用了同样的东西。你用的是什么设备?还有具体的版本号是多少?是5.0吗? - Kevin van Mierlo
@Williams,你能给我一个URL和你正在调用的确切方法吗?我会测试一下,看看可能出了什么问题。 - Kevin van Mierlo
让我们在聊天中继续这个讨论。点击此处进入聊天室 - N Sharma
显示剩余2条评论

0
        Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView, new Callback()      { 
    @Override public void onSuccess() 
    {
     } 
   @Override public void onError() 
   {
    }
     });

fit()函数可以帮助你加载图片。在xml文件中的ImageView标签中使用android:adjustViewBounds="true"属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接