entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Error cargar lista imagenes android

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.

0voto

1raziel1 comentado

enseña el error a ver, si no ...

1voto

1raziel1 comentado

¿Sabéis alguna manera de que cuando llegue ese error la app lo ignore evitando así su cierre inesperado? con eso me valdría.

con un try&catch deberias de poder capturar la excepcion y evitar el cierre

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta