画像の読み込みのために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);
Picasso 2.0では、コールバックをリクエストに添付できます。
https://github.com/square/picasso
使用しているコールバックは「グローバル」リスナー用であり、ネットワーク負荷が原因で発生する可能性のあるエラーをデバッグするのに役立ちます。
Picasso 2.0ではload(url).into(view, new Callback() {...});
を使用します。
Callback
を使用している場合は、必ずcancelRequest(target)
を呼び出してください。
私の例:
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);
「グローバル」リスナーを追加してみてください。
_ // 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をカスタマイズ
私の答え:
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);
}
});
エラーが発生した場合、エラーは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);
}
});
}
単なる提案ですが、「空の」pngファイルを作成してresフォルダーのデフォルトのイメージファイルとして設定すると、プログラミングの問題を回避できる可能性があります。 。