Android 毕加索图书馆,安卓:使用错误监听器

Android 毕加索图书馆,安卓:使用错误监听器,android,listener,Android,Listener,我正在玩弄毕加索图书馆来加载图像,但我遇到了一个问题。当图像加载失败时,我希望隐藏视图,而不是在默认图像中加载。我从源代码中注意到,添加侦听器的唯一方法似乎是从构建器中,但是当图像加载失败时,不会调用error方法。有人有这方面的经验吗 iv = (ImageView) findViewById(R.id.imageView); Picasso.Builder builder = new Picasso.Builder(getApplicationContext());

我正在玩弄毕加索图书馆来加载图像,但我遇到了一个问题。当图像加载失败时,我希望隐藏视图,而不是在默认图像中加载。我从源代码中注意到,添加侦听器的唯一方法似乎是从构建器中,但是当图像加载失败时,不会调用error方法。有人有这方面的经验吗

    iv = (ImageView) findViewById(R.id.imageView);

    Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
    builder.listener(new Picasso.Listener() {

        @Override
        public void onImageLoadFailed(Picasso arg0, String arg1) {
            Log.e("Picasso Error", "Errored out, hiding view");
            iv.setVisibility(View.GONE);
        }
    });
    Picasso pic = builder.build();
    pic.load("thisshouldbreak.jpg").into(iv);

毕加索2.0允许您将回调附加到请求中

您正在使用的回调用于“全局”侦听器,它可以帮助您调试可能由于网络负载而发生的错误

使用
load(url).into(view,newcallback(){…})


如果您使用的是
回调

只是一个建议,请记住调用
取消请求(目标)
,但如果您创建一个“空”png文件并将其设置为res文件夹中的默认图像文件,则可能会避免编程中出现问题。。。我知道有点傻。。。但可能在不打架的情况下工作…

我的例子:

Picasso picasso = new Picasso.Builder(parent.getContext())
            .listener(new Picasso.Listener() {
                @Override
                public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                //Here your log
                }
            })
            .build();
    picasso.load(shopModel.getShopImg())
            .fit()
            .into(viewHolder.shopImg);
我的答覆是:

File file = new File(filePath);
        Picasso.with(context).load(file).placeholder(R.drawable.draw_detailed_view_display).error(R.drawable.draw_detailed_view_display)
        .resize(400, 400).into(mImageView, new Callback() {

            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                mImageView.setVisibility(View.GONE);
            }
        });

您可以尝试添加“全局”侦听器

    // create Picasso.Builder object
    Picasso.Builder picassoBuilder = new Picasso.Builder(this);

    picassoBuilder.listener(new Picasso.Listener() {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
            Log.e("PICASSO", uri.toString(), exception);
        }
    });

    // Picasso.Builder creates the Picasso object to do the actual requests
    Picasso picasso = picassoBuilder.build();

    try {
        Picasso.setSingletonInstance(picasso);
    } catch (IllegalStateException ignored) {
        // Picasso instance was already set
        // cannot set it after Picasso.with(Context) was already in use
    }
任何后续调用
Picasso.with(Context Context)
都将返回连接到侦听器的实例,因此所有失败都将被记录

请注意,您需要尽快调用
setSingletonInstance
,例如在应用程序
onCreate


这里采用的p.S.代码-

当我们得到错误时,错误会转到onError方法,然后我们处理它

private void getAvatar(){
        Picasso.with(this)
                .load(Links.GET_AVATAR + ".jpg")
                .into(imgUserAvatar, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {
                        imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
                    }
                });
}

我怎样才能得到毕加索2.0?我只看到1.1.1。手动获取源代码并构建jar。官方即将发布。@howettl gethere@dnkoutso加载时如何使用进度条?问题是OneError没有提供有关错误的信息。而且,我的onImageLoadFailed从未像问题所说的那样被调用。这不是一种实用的方式。当然,在某些情况下,如果图像url不是有效的格式,这是一个很好的建议。但是如果某个url是1呢//cdn.bla2.com/sample.png 2。png在这种情况下,它的错误,因为只有前缀,所以它很好地检查这个错误,以及它的工作,但感谢花时间投票否决埃米尔。。。提供解决方案的意义在于,该解决方案通过emil。。。你可能想看看日期。。。在《毕加索2》出版之前我解决了他的问题。。。当然,更年轻的答案取决于它…嗨,谢谢你的支持,似乎对代码多解释一点会更有帮助谢谢!这也允许我使用自定义的okhttpclient,使用自签名证书。你参加聚会有点晚了:P这是4年前onError出现之前的事。