Muy buenas, tengo un error que me trae de cabeza desde hace un par de dias, resulta que tengo un listview que me trae miniaturas de imagen junto con un texto a la derecha metidos en cards, encontré una clase asíncrona para realizar la descarga y visualización de dichas imagenes, este es el código de la clase:
class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public ImageDownloaderTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
@Override
protected Bitmap doInBackground(String... params) {
return downloadBitmap(params[0]);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
Drawable placeholder = imageView.getContext().getResources().getDrawable(R.drawable.cargando);
imageView.setImageDrawable(placeholder);
}
}
}
}
private Bitmap downloadBitmap(String url) {
HttpURLConnection urlConnection = null;
try {
URL uri = new URL(url);
urlConnection = (HttpURLConnection) uri.openConnection();
int statusCode = urlConnection.getResponseCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
InputStream inputStream = urlConnection.getInputStream();
if (inputStream != null) {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
urlConnection.disconnect();
Log.w("ImageDownloader", "Error downloading image from " + url);
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return null;
}
}
Lo que hace es recoger una url pasarsla al método que descarga y despues la devuelve al método que la llamo en forma de bitmap, y la cosa funciona a las mil maravillas, asi llamo a esta clase, desde el getView de el adaptador de mi listView:
ImageView img = (ImageView)item.findViewById(R.id.iv_row);
if (img != null) {
new ImageDownloaderTask(img).execute("http://urlmipagina.com/imagenes/"+datos.get(position).getImagen());
}
Como he dicho antes esto funciona perfecto, pero al probar la app aleatoriamente se cierra, descubrí que era porque el imageDownloaderTask intenta acceder a una imagen cuyo nombre tiene espacios "foto 01 tal.jpg", cambie el nombre de ese par de imagenes que estaban mal y la app sigue fallando en la clase imageDownloaderTask y ya no se porque es, porque todas las imagenes estan correctas y en el LOG me tira el error, error on inBackground() y ya esta asique no me ayuda mucho a encontrar la linea donde falla.
¿Sabéis alguna manera de que cuando llegue ese error la app lo ignore evitando así su cierre inesperado? con eso me valdría.