首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自MediaStore.Images.Thumbnails.getThumbnail的CursorWindowAllocationException

来自MediaStore.Images.Thumbnails.getThumbnail的CursorWindowAllocationException
EN

Stack Overflow用户
提问于 2015-10-18 14:00:24
回答 1查看 654关注 0票数 1

我偶尔会从MediaStore.Images.Thumbnails.getThumbnail得到一个(相当罕见的)异常(见下文)。类似的问题建议总是关闭游标,但我没有执行显式查询。

我这样称呼它:

读取缩略图的私有函数..(

代码语言:javascript
复制
      private Bitmap getThumbnail(long imageId) { return MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), imageId,
      MediaStore.Images.Thumbnails.MINI_KIND, null); }

从这里调用:

代码语言:javascript
复制
Cursor cursor = null;
int numProcessed = 0, numFaceDetected = 0;
try {
  dirtyFile.createNewFile();

  String[] projection = {
      MediaStore.Images.Media._ID,
      MediaStore.Images.Media.DATA,
      MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
      MediaStore.Images.Media.ORIENTATION
  };

  cursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
      projection,
      null,
      null,
      MediaStore.Images.Media.DATE_ADDED + " desc");

  if (cursor == null) {
    return;
  }

  cursor.moveToFirst();
  final int columnIndexId = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
  final int columnIndexData = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
  final int columnIndexOrientation = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.ORIENTATION);
  final int columnIndexBucketName = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);

  while (!cursor.isAfterLast()) {
    final long imageId = cursor.getLong(columnIndexId);
    final String imagePath = cursor.getString(columnIndexData);
    final int imageOrientation = cursor.getInt(columnIndexOrientation);

    Bitmap bitmap = getThumbnail(imageId);
    faceDetect(bitmap); 

    cursor.moveToNext();
    numProcessed++;

  }

以下是例外情况:

代码语言:javascript
复制
android.database.CursorWindowAllocationException: Cursor window could not be created from binder.
       at android.database.CursorWindow.(CursorWindow.java:137)
       at android.database.CursorWindow.(CursorWindow.java:42)
       at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:685)
       at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:683)
       at android.database.BulkCursorDescriptor.readFromParcel(BulkCursorDescriptor.java:75)
       at android.database.BulkCursorDescriptor$1.createFromParcel(BulkCursorDescriptor.java:34)
       at android.database.BulkCursorDescriptor$1.createFromParcel(BulkCursorDescriptor.java:30)
       at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
       at android.content.ContentResolver.query(ContentResolver.java:478)
       at android.content.ContentResolver.query(ContentResolver.java:422)
       at android.provider.MediaStore$InternalThumbnails.getThumbnail(MediaStore.java:680)
       at android.provider.MediaStore$Images$Thumbnails.getThumbnail(MediaStore.java:1060)
EN

回答 1

Stack Overflow用户

发布于 2015-10-18 17:21:18

代码语言:javascript
复制
Could you try replacing your thumb nail code with this

    Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
                                 getContentResolver(), selectedImageUri,
                                 MediaStore.Images.Thumbnails.MINI_KIND,
                                 null );
    if( cursor != null && cursor.getCount() > 0 ) {
         cursor.moveToFirst();//**EDIT**
         String uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
    }

Reference of this answer is taken from [here][1]


  [1]: http://stackoverflow.com/questions/5548645/get-thumbnail-uri-path-of-the-image-stored-in-sd-card-android
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33194833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档