Как использовать библиотеку Пикассо с MediaStore

Я хочу получить uri сохраненных изображений галереи с помощью MediaStore.Images.Media и загрузить изображения с помощью библиотеки Picasso. Я сделал это, используя приведенный ниже код. Но он не дает никаких ошибок и не отображает изображения в представлении изображений (которое присутствует в представлении списка).

        Picasso.with(getActivity()).load(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
                .resize(300, 300).centerInside().into(holder.imageView);

Кто-нибудь, помогите мне, пожалуйста....


person FAK    schedule 29.08.2014    source источник


Ответы (1)


Вам нужно на самом деле запросить базу данных для изображений uri в MediaStore.

Например, чтобы получить первое изображение из MediaStore и загрузить его, вы должны сделать

        String[] projection = {
                MediaStore.Images.Media._ID
        };
        // Create the cursor pointing to the SDCard
        mCursor = getActivity().managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection, // Which columns to return
                null,       // Return all rows
                null,
                MediaStore.Images.Media.DATE_ADDED);
        getActivity().startManagingCursor(mCursor);

        // Get the column index of the Thumbnails Image ID
        if (mCursor != null) {
            columnIndex = mCursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

            int size = mCursor.getCount();
            // If size is 0, there are no images on the SD Card.
            if (size == 0) {
                return;
            }

            mCursor.moveToPosition(0);
            int imageID = mCursor.getInt(columnIndex);
            Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(imageID));

           Picasso.with(getActivity()).load(imageUri)
            .resize(300, 300).centerInside().into(holder.imageView);
        }

Кроме того, поскольку это запрос к БД, вам, возможно, следует сделать это в AsyncTask, вернуть URI в postExecute и загрузить его в Picasso, поскольку на некоторых устройствах чтение БД может быть медленным.

person Pedlar    schedule 29.08.2014
comment
Я уже сделал это точно. Проблема в том, что приложению требуется время для извлечения Uri из всех изображений медиастора, хотя я использовал Asynctask для обработки URI. Вот почему мне нужно упростить этот процесс. Большое спасибо за то, что приложили усилия и время для решения моей проблемы. - person FAK; 29.08.2014
comment
Да, операции чтения/записи базы данных обходятся дорого и всегда должны выполняться в фоновом потоке/AsyncTask, поэтому вам следует загрузить Progress Spinner, который показывает, что страница что-то делает с пользователем во время обработки данных. Если вам нужно больше немедленно видимого экрана, вы можете выполнить эту тяжелую работу во время запуска приложения в расширенном классе onCreate приложения и хранить Uri в памяти до тех пор, пока они вам не понадобятся. - person Pedlar; 30.08.2014