【问题标题】:Android: Picasso load image failed . how to show error messageAndroid:毕加索加载图片失败。如何显示错误信息
【发布时间】:2014-11-02 20:36:02
【问题描述】:

我正在尝试使用 picasso 库将图像存储加载到媒体存储中。当我调用 load(imageview, callback) 时,毕加索调用 onFail 而不是 onSuccess。怎么知道图片加载不成功?

【问题讨论】:

标签: android image mediastore picasso


【解决方案1】:

使用构建器:

    Picasso.Builder builder = new Picasso.Builder(this);
    builder.listener(new Picasso.Listener()
    {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)
        {
            exception.printStackTrace();
        }
    });
    builder.build().load(URL).into(imageView);

编辑

对于 2.71828 版本,他们已将异常添加到 onError 回调中:

        Picasso.get()
            .load("yoururlhere")
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {
                }

                @Override
                public void onError(Exception e) {
                }
            })

【讨论】:

    【解决方案2】:

    当你使用回调时,picaso 会调用方法 onSuccess 和 onError!

    File fileImage = new File(mPathImage);
            Picasso.with(mContext).load(fileImage)
                    .placeholder(R.drawable.draw_detailed_view_display)
                    .error(R.drawable.draw_detailed_view_display)
                    .resize(200, 200)
                    .into(holder.mImageEvidence, new Callback() {
                        @Override
                        public void onSuccess() {
                            holder.mMediaEvidencePb.setVisibility(View.GONE);
                        }
    
                        @Override
                        public void onError() {
                            holder.mErrorImage.setVisibility(View.VISIBLE);
                        }
                    });
    

    【讨论】:

    • 如何获取onError中无法加载图片的原因?
    • 方法 onError 不提供有关错误的信息。它只会帮助您通过 show "mErrorImage" 意识到发生错误
    • 这也是我所知道的。应该使用全局监听器。
    【解决方案3】:

    如果您想将 Picasso 与 Kotlin 和 lambda 表达式一起使用,则可以这么短:

    val picasso = Picasso.Builder(context)
                .listener { _, _, e -> e.printStackTrace() }
                .build()
    

    ...然后你就可以像往常一样加载图片了:

    picasso.load(url).into(imageView)
    

    【讨论】:

      【解决方案4】:

      您是否在Manifest 中添加了互联网权限?有了 Kevin 的回答 here,请查看异常日志并在此处发布异常。

      【讨论】:

        【解决方案5】:
        val picasso = Picasso.Builder(context).listener(
                            object : Picasso.Listener{
                                override fun onImageLoadFailed(picasso: Picasso?, uri: Uri?, exception: Exception?) {
                                    exception?.printStackTrace()
                                    println("Picasso loading failed : ${exception?.message}")
                                }
        
                            }
                    ).build()
        picasso.load(imageUrl).into(imageView)
        

        【讨论】:

          【解决方案6】:

          请试试这个检查毕加索的日志

          Picasso.with(getContext()).setLoggingEnabled(true);
          

          【讨论】:

            【解决方案7】:
            You have use picasso exception handler. Because if you are to use traditional exception handler(try / catch) it wont catch the actual exception.
            
            var imgURL = Your image url
            var imgHolder = Id of your image view
            
            val picasso = Picasso.Builder(this@yourActivity)
                        .listener { picasso, uri, exception ->
                            //Here your log - Log cat - error
                            Log.e("Exception ", exception.stackTraceToString())
                        }
                        .build()
            
                    picasso.load(imgURL)
                        .fit()
                        .into(imgHolder)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-11-16
              • 2016-12-12
              • 2018-09-07
              • 2016-04-07
              • 2020-12-10
              • 2023-04-11
              • 2015-08-24
              相关资源
              最近更新 更多