es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizando el código para incluir el manejo de errores y un hilo de trabajo

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Soy nuevo en el desarrollo de Android. Me gustaría que el código a continuación (para consultar una colección de medios) se actualice para incluir un bloque de try y catch para el manejo de errores, y el método query() se llame en un hilo de trabajo.

public void getAllImages(){
    Uri imageCollection;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        imageCollection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
    } else {
        imageCollection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
    }

    String[] projection = new String[] {
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.DISPLAY_NAME,
            MediaStore.Images.Media.DATE_ADDED,
            MediaStore.Images.Media.SIZE
    };

    String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC";

    try {
        Cursor cursor = getActivity().getContentResolver().query(imageCollection , projection, null, null, sortOrder);
        int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
        int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
        int dateColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_ADDED);
        int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE);

        while (cursor.moveToNext()) {
            long id = cursor.getLong(idColumn);
            String name = cursor.getString(nameColumn);
            int duration = cursor.getInt(dateColumn);
            int size = cursor.getInt(sizeColumn);
            Uri uriImage = Uri.withAppendedPath(imageCollection, ""+ id);
            ImageModel imageModel = new ImageModel();
            imageModel.setImage(uriImage);
            imageList.add(imageModel);
        }
        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
        // Manejo de errores
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar el manejo de errores al código y llamar al método query() en un hilo de trabajo, puedes realizar los siguientes cambios:

    public void getAllImages() {
        Uri imageCollection;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            imageCollection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
        } else {
            imageCollection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        }
    
        String[] projection = new String[] {
                MediaStore.Images.Media._ID,
                MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.DATE_ADDED,
                MediaStore.Images.Media.SIZE
        };
    
        String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC";
    
        new Thread(() -> {
            try {
                Cursor cursor = getActivity().getContentResolver().query(
                        imageCollection,
                        projection,
                        null,
                        null,
                        sortOrder
                );
    
                int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
                int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
                int dateColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_ADDED);
                int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE);
    
                while (cursor.moveToNext()) {
                    long id = cursor.getLong(idColumn);
                    String name = cursor.getString(nameColumn);
                    int duration = cursor.getInt(dateColumn);
                    int size = cursor.getInt(sizeColumn);
                    Uri uriImage = Uri.withAppendedPath(imageCollection, ""+ id);
                    ImageModel imageModel = new ImageModel();
                    imageModel.setImage(uriImage);
                    imageList.add(imageModel);
                }
                cursor.close();
            } catch (Exception e) {
             e.printStackTrace();
                // Agrega código para manejar la excepción.
            }
        }).start();
    }
    

    En este código actualizado, hemos encapsulado la llamada a query() dentro de un bloque try para capturar cualquier excepción que pueda ocurrir durante la ejecución de la consulta. También hemos movido todo el bloque de código a un hilo separado utilizando una expresión lambda y pasándolo al constructor de la clase Thread.

    Ten en cuenta que no hemos agregado código para manejar la excepción que puede ocurrir. Deberás agregar tu propio código para manejar la excepción según tus requisitos específicos.

Comments are closed.