如何将Picasso Library与MediaStore一起使用

时间:2014-08-29 18:43:50

标签: android picasso

我希望使用MediaStore.Images.Media获取图库的存储图像,并使用Picasso库加载图像。我使用下面的代码完成了这个。但它既没有出现任何错误也没有在imageview中显示图像(列表视图中存在)。

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

任何人都请帮帮我....

1 个答案:

答案 0 :(得分:3)

您需要在数据库中查询MediaStore中的图像uri。

例如,要从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中,因为在某些设备上DB读取速度可能会很慢。