25

画像をロードするために Picasso ライブラリをいじっていますが、問題が発生しています。画像の読み込みに失敗した場合、デフォルトの画像を読み込むのではなく、ビューを非表示にしたいと考えています。ソースから、リスナーを追加する唯一の方法はビルダーからのように見えることに気付きましたが、画像の読み込みに失敗したときにエラーメソッドが呼び出されることはありません。誰でもこれを経験したことがありますか?

    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);
4

6 に答える 6

52

Picasso 2.0 では、リクエストにコールバックを添付できます。

https://github.com/square/picasso

使用しているコールバックは「グローバル」リスナー用であり、ネットワーク負荷が原因で発生する可能性のあるエラーをデバッグするのに役立ちます。

load(url).into(view, new Callback() {...});Picasso 2.0 で使用します。

cancelRequest(target)を使用している場合は、忘れずに呼び出してくださいCallback

于 2013-07-30T06:37:01.697 に答える
19

私の例:

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);
于 2015-07-24T10:57:54.063 に答える
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
    }

後続の呼び出しはPicasso.with(Context context)、リスナーに接続されたインスタンスを返すため、すべての失敗がログに記録されます。

setSingletonInstanceアプリケーションなどで、できるだけ早く電話する必要があることに注意してくださいonCreate

ここから採用された PS Code - Picasso.Builder による Picasso のカスタマイズ

于 2016-06-01T13:42:17.520 に答える
4

私の答え:

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);
            }
        });
于 2015-10-30T04:02:14.527 に答える