【问题标题】:Images are not loading in android 5.0 using picasso library使用毕加索库无法在 android 5.0 中加载图像
【发布时间】:2015-05-28 10:15:31
【问题描述】:

我正在开发使用 Picasso 库 v2.5.2 的演示应用程序。它在所有 android 操作系统版本上都可以正常工作,但在棒棒糖中却不行。

图片大小为 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);

我不确定我需要做哪些额外的事情,这样我才能在棒棒糖上工作,或者这是 lib 中的错误?

【问题讨论】:

    标签: android picasso


    【解决方案1】:

    这是一个已知问题。问题是毕加索对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,它与毕加索非常相似,也是谷歌推荐的。而在this thread的末尾可以看到,原开发者通过使用额外的缓冲区解决了这个BitmapFactory问题。

    【讨论】:

    • 我不确定需要做哪些更改。我正在使用毕加索库。如何解决。你能分享一下它的代码吗..
    • 我也试过 Glide 但也面临同样的问题:(
    • 毕加索即使在设定目标时也无法工作。 Glide 非常适合我。
    【解决方案2】:

    如果您只需要将图像加载到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
            }
        });
    

    有关文档,请查看 here

    【讨论】:

    • 图像加载完毕后,我将关闭进度对话框。我在onBitmapLoaded 中有那行代码
    • @Williams 看到我的编辑。您可以为此使用Callback。如果你真的需要使用它,我建议你只使用Target
    • 好的,谢谢,我会试试这个并会更新你。
    • @Williams 什么不起作用?我今天在棒棒糖上用了同样的东西。你有什么设备?以及具体的版本。 5.0?
    • 我正在测试 nexus 6,图像大小为 130KB 或更大,我无法加载。尺寸较小的图像可以正确加载。
    【解决方案3】:
            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"。

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多