web-dev-qa-db-ja.com

Android、ピカソライブラリ:エラーリスナーの使用

画像の読み込みのために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);
24
Paul Ruiz

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

https://github.com/square/picasso

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

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

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

52
dnkoutso

私の例:

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

「グローバル」リスナーを追加してみてください。

_    // 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で。

追伸ここから採用されたコード- Picasso.BuilderでPicassoをカスタマイズ

5
Anton Malmygin

私の答え:

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);
            }
        });
4
TVT. Jake

エラーが発生した場合、エラーは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
Hadi Note

単なる提案ですが、「空の」pngファイルを作成してresフォルダーのデフォルトのイメージファイルとして設定すると、プログラミングの問題を回避できる可能性があります。 。

1
me_