studio - picasso android dev
Biblioteca Picasso, Android: Uso de escucha de errores (6)
Estoy jugando con la biblioteca de Picasso para cargar imágenes, pero tengo un problema. Cuando una imagen no se carga, quiero ocultar la vista en lugar de cargarla en una imagen predeterminada. Noté desde la fuente que parece que la única forma de agregar un oyente es desde el generador, pero nunca se llama al método de error cuando una imagen no se carga. Alguien tiene alguna experiencia con esto?
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);
Cuando recibimos un error, el error va al método onError y luego lo manejamos.
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);
}
});
}
Mi ejemplo
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);
Mi respuesta:
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);
}
});
Picasso 2.0 le permite adjuntar una devolución de llamada en una solicitud.
https://github.com/square/picasso
La devolución de llamada que está utilizando es para la escucha "global" y le ayuda a depurar los errores que pueden ocurrir debido a una carga de red.
Use load(url).into(view, new Callback() {...});
en Picasso 2.0.
Recuerde invocar cancelRequest(target)
si está utilizando una Callback
.
Puedes intentar agregar un oyente ''global''.
// 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
}
Cualquier llamada subsiguiente a Picasso.with(Context context)
devolverá la instancia que se conectó al oyente, por lo que se registrarán todas las fallas.
Tenga en cuenta que debe llamar a setSingletonInstance
lo antes posible, por ejemplo, en Application onCreate
.
Código de PS adoptado desde aquí: personalización de Picasso con Picasso.Builder
Solo una sugerencia, pero puede evitar problemas en la programación si crea un archivo png "vacío" y lo configura como el archivo de imagen predeterminado en su carpeta de resolución ... un poco tonto, lo sé ... pero es probable que funcione sin pelear ... .