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

Pau*_*uiz 24 android listener

我正在玩Picasso库进行图像加载,但我遇到了一个问题.当图像无法加载时,我想隐藏视图而不是加载默认图像.我从源代码中注意到,添加侦听器的唯一方法是来自构建器,但是当图像无法加载时,永远不会调用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);
Run Code Online (Sandbox Code Playgroud)

dnk*_*tso 52

Picasso 2.0允许您将回调附加到请求中.

https://github.com/square/picasso

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

load(url).into(view, new Callback() {...});在Picasso 2.0中使用.

cancelRequest(target)如果您使用的话,请记得调用Callback.

  • 问题是onError不提供有关错误的信息.而且,问题所在,我的onImageLoadFailed永远不会被调用. (29认同)

小智 17

我的例子:

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);
Run Code Online (Sandbox Code Playgroud)


Ant*_*gin 5

您可以尝试添加"全局"侦听器.

    // 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
    }
Run Code Online (Sandbox Code Playgroud)

任何后续调用都Picasso.with(Context context)将返回连接到侦听器的实例,因此将记录所有失败.

请注意,您需要尽快致电setSingletonInstance,例如在申请表中onCreate.

PS Code从这里采用 - 用Picasso.Builder定制Picasso