Intento cargar una imagen remota desde un servidor y gracias a una gran cantidad de ejemplos de código en stackoverflow tengo una solución que funciona en 2 de 3 imágenes. Realmente no sé cuál es el problema con la tercera imagen y, a veces, cuando dejo que el código se ejecute en el depurador, la imagen se está cargando. Además, si cargué la imagen problemática primero, las otras dos imágenes a veces no se cargan.BitmapFactory.decodeStream devuelve nulo sin excepción
Aquí está el código:
public static Drawable getPictureFromURL(Context ctx, String url, final int REQUIRED_SIZE) throws NullPointerException {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
int scale = 1;
if (o.outWidth > REQUIRED_SIZE) {
scale = (int) Math.pow(2, (int) Math.round(Math.log(REQUIRED_SIZE/(double) Math.max(o.outHeight, o.outWidth))/Math.log(0.5)));
}
Log.i(Prototype.TAG, "scale: "+scale);
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
Bitmap bmp;
try {
bmp = BitmapFactory.decodeStream((InputStream) Tools.fetch(url), null, o2);
if(bmp!=null)
return new BitmapDrawable(ctx.getResources(), bmp);
else
return null;
} catch (Exception e) {
Log.e(Prototype.TAG, "Exception while decoding stream", e);
return null;
}
}
durante la depuración descubrí que o.outWidth es -1, que indica un error, pero no es una excepción es lanzada, por lo que no se puede decir lo que salió mal. El InputStream siempre devolvió un valor válido, y sé que la imagen existe en el servidor.
mejores deseos, Daniel
1, pero parece ahora que las imágenes se descargan de forma secuencial en lugar de en paralelo (Estoy dl-ing cada imagen en una AsyncTask separada). Al menos funciona ... – kellogs