使用ContentResolver和Cursor获取android中图像的缩略图

时间:2011-12-19 08:01:12

标签: android cursor thumbnails mediastore android-contentresolver

以下是获取给定图像缩略图的代码。 截至目前,我得到的例外是“光标越界”

我认为这可能是因为我没有将图片网址附加到任何地方。关于在哪里这样做,我有点困惑。 那2个问题: 1.我在哪里使用我想要获取缩略图的图像URL 2.应该打印列名的for循环除第一个语句'COLUMN NAMES'

外什么都不打印

        //get the corresponding thumbnail
                String lastImageTakenPath = MyActivity.this.savedInstanceStateVariable.getString("lastImageTaken");
                System.out.println("previous image is "+ lastImageTakenPath);                   

        ContentResolver cr = getContentResolver();
        if(cr != null){


        String[] projection = { MediaStore.Images.Media._ID };  

                    Cursor cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,projection,null,null,null);



        //Cursor cursor = cr.query(lastImageTakenURI, null, null, null, null);
        //Activity.startManagingCursor(cursor);
         if(cursor != null){
        String[] columnNames = cursor.getColumnNames();

                        System.out.println("COLUMN NAMES");
        for(int i=0;i<columnNames.length; i++){
           System.out.println(columnNames[i]);
         }


          /* 1. get the id of the image
                * 2. use this id in the call, getThumbnails on MediaStore.Images.Thumbnails to obtain the 
                            thumbnail
         3.set the imageview's src to this thumbnail */

        int imageID = cursor.getInt( cursor.getColumnIndex(MediaStore.Images.Media._ID) ); 

         Uri uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
                       // Get original image ID  
                       String url = uri.toString();
                       int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
        // Get (or create upon demand) the micro thumbnail for the original image.    
          thumbnailLastImage = MediaStore.Images.Thumbnails.getThumbnail(cr, originalImageId, MediaStore.Images.Thumbnails.MICRO_KIND,null);

         thumbnailImage.setImageBitmap(thumbnailLastImage);



          } 
          else{
            System.out.println("Cursor is NULL");
             }
    }
    else{
      Log.d(TAG,"ContentResolver is NULL");
    }

//get the corresponding thumbnail String lastImageTakenPath = MyActivity.this.savedInstanceStateVariable.getString("lastImageTaken"); System.out.println("previous image is "+ lastImageTakenPath); ContentResolver cr = getContentResolver(); if(cr != null){ String[] projection = { MediaStore.Images.Media._ID }; Cursor cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,projection,null,null,null); //Cursor cursor = cr.query(lastImageTakenURI, null, null, null, null); //Activity.startManagingCursor(cursor); if(cursor != null){ String[] columnNames = cursor.getColumnNames(); System.out.println("COLUMN NAMES"); for(int i=0;i<columnNames.length; i++){ System.out.println(columnNames[i]); } /* 1. get the id of the image * 2. use this id in the call, getThumbnails on MediaStore.Images.Thumbnails to obtain the thumbnail 3.set the imageview's src to this thumbnail */ int imageID = cursor.getInt( cursor.getColumnIndex(MediaStore.Images.Media._ID) ); Uri uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) ); // Get original image ID String url = uri.toString(); int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); // Get (or create upon demand) the micro thumbnail for the original image. thumbnailLastImage = MediaStore.Images.Thumbnails.getThumbnail(cr, originalImageId, MediaStore.Images.Thumbnails.MICRO_KIND,null); thumbnailImage.setImageBitmap(thumbnailLastImage); } else{ System.out.println("Cursor is NULL"); } } else{ Log.d(TAG,"ContentResolver is NULL"); }

1 个答案:

答案 0 :(得分:-2)

我相信你对if(cursor!= null)的测试是不正确的或至少是不够的。如果查询结果没有返回任何缩略图,那么您仍然会得到一个游标,其中cursor.getCount()== 0您可能希望将其用作测试。