Библиотека Picasso, Android: использование приемника ошибок
Я играю с библиотекой 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);
Ответы
Ответ 1
Picasso 2.0 позволяет присоединить обратный вызов к запросу.
https://github.com/square/picasso
Обратный вызов, который вы используете, предназначен для "глобального" прослушивателя, и он помогает вам отлаживать ошибки, которые могут произойти из-за сетевой нагрузки.
Используйте load(url).into(view, new Callback() {...});
в Picasso 2.0.
Не забудьте вызвать cancelRequest(target)
, если вы используете Callback
.
Ответ 2
Мой пример:
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);
Ответ 3
Вы можете попробовать добавить "глобальный" прослушиватель.
// 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. Код принят здесь - Настройка Picasso с Picasso.Builder
Ответ 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);
}
});
Ответ 5
Просто предложение, но вы можете избежать проблем с программированием, если вы создадите "пустой" png файл и установите его как файл образа по умолчанию в папке res... вроде глупо, я знаю... но, вероятно, работать без борьба с...
Ответ 6
Когда мы получили ошибку, ошибка переходит к методу onError, тогда мы его обрабатываем!
private void getAvatar(){
try {
Picasso.with(mContext)
.load(G.GET_AVATAR + '/' + G.SPUser.getString(G.PHONE_NUMBER_KEY, null) + ".jpg")
.into(imgUserAvatar, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}