2014-08-29 52 views
0

我想使用MediaStore.Images.Media获取图库的存储图像,并使用毕加索图书馆加载图像。我已经使用下面的代码做了这个。但它既不会给出任何错误,也不会在imageview中显示图像(它存在于listview中)。如何使用带有MediaStore的毕加索图书馆

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

人帮助我,请....

回答

1

实际上你需要在数据库中查询在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读取速度可能较慢。

+0

我已经完全做到了这一点。问题是,即使我使用Asynctask进行uri处理,应用程序也需要时间来提取所有mediastore图像的Uri。这就是为什么我需要简化这一过程。非常感谢你的努力和时间来解决我的问题。 – FAK 2014-08-29 19:52:10

+0

是的,数据库读/写很昂贵,应该始终在后台线程/ AsyncTask中完成,因此您应该加载一个Progress Spinner,它显示页面在数据处理过程中正在为用户做些什么。如果您需要更多的“立即”可见屏幕,那么您可以在应用程序启动时在应用程序扩展类的onCreate上完成这些繁重的工作,并将Uri存储在内存中直到您需要它们。 – Pedlar 2014-08-29 21:10:55