实际上你需要在数据库中查询在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读取速度可能较慢。
我已经完全做到了这一点。问题是,即使我使用Asynctask进行uri处理,应用程序也需要时间来提取所有mediastore图像的Uri。这就是为什么我需要简化这一过程。非常感谢你的努力和时间来解决我的问题。 – FAK 2014-08-29 19:52:10
是的,数据库读/写很昂贵,应该始终在后台线程/ AsyncTask中完成,因此您应该加载一个Progress Spinner,它显示页面在数据处理过程中正在为用户做些什么。如果您需要更多的“立即”可见屏幕,那么您可以在应用程序启动时在应用程序扩展类的onCreate上完成这些繁重的工作,并将Uri存储在内存中直到您需要它们。 – Pedlar 2014-08-29 21:10:55