Amani_Nakupenda
大卫斯特恩
2016-02-19 05:15
采纳率: 100%
浏览 7.6k

Android某些手机上getContentResolver().query得到的结果报空指针

Uri uri = data.getData();
String[] proj = {MediaStore.Images.Media.DATA};
//Cursor cursor = managedQuery(uri, proj, null, null, null);
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);

无论我是用managedQuery还是用getContentResolver().query在升级了Android6.0的小米4上得到的cursor都是空指针。而其他手机一切正常。求大神解惑

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • Amani_Nakupenda
    大卫斯特恩 2016-02-19 08:00
    已采纳
    点赞 评论
  • luochoudan
    丑旦 2016-02-19 15:05

    4.4版本前后的uri形式不同,顶一个

    点赞 评论
  • yuxiuj
    小于同学 2016-08-11 07:16

    大神,那个网页打不开了,你能说说是怎么解决的吗?

    点赞 评论
  • u012892687
    a544026227 2016-08-15 06:53

    同问,请问是如何解决的

    点赞 评论
  • qq_28496403
    qq_28496403 2016-08-19 08:09

    跪求啊,怎么解决的啊

    点赞 评论
  • Amani_Nakupenda
    大卫斯特恩 2016-08-30 08:25

    /*
    查询相册数据库获取图片路径
    /
    Uri uri = data.getData();
    // String[] proj = {MediaStore.Images.Media.DATA};
    // Cursor cursor = managedQuery(uri, proj, null, null, null);
    // Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
    // if (cursor != null && cursor.getCount() >= 1) {
    // while (cursor.moveToNext()) {
    // cursor.moveToFirst();
    // int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    // path = cursor.getString(column_index);// 图片在的路径
    /

    打开图片裁剪界面
    */
    path = getImageAbsolutePath(EditUserInfoAvtivity.this, uri);

                                这段代码里面,注掉的部分,就是我提问时的写法,会出现空指针bug。
                                换成下面的方法以后,问题就解决了:
                                /**
     * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
     */
    public String getImageAbsolutePath(Activity context, Uri imageUri) {
        if (context == null || imageUri == null)
            return null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {
            if (isExternalStorageDocument(imageUri)) {
                String docId = DocumentsContract.getDocumentId(imageUri);
                String[] split = docId.split(":");
                String type = split[0];
                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/" + split[1];
                }
            } else if (isDownloadsDocument(imageUri)) {
                String id = DocumentsContract.getDocumentId(imageUri);
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
                return getDataColumn(mContext, contentUri, null, null);
            } else if (isMediaDocument(imageUri)) {
                String docId = DocumentsContract.getDocumentId(imageUri);
                String[] split = docId.split(":");
                String type = split[0];
                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                String selection = MediaStore.Images.Media._ID + "=?";
                String[] selectionArgs = new String[]{split[1]};
                return getDataColumn(mContext, contentUri, selection, selectionArgs);
            }
        } // MediaStore (and general)
        else if ("content".equalsIgnoreCase(imageUri.getScheme())) {
            // Return the remote address
            if (isGooglePhotosUri(imageUri))
                return imageUri.getLastPathSegment();
            return getDataColumn(mContext, imageUri, null, null);
        }
        // File
        else if ("file".equalsIgnoreCase(imageUri.getScheme())) {
            return imageUri.getPath();
        }
        return null;
    }
    
    点赞 评论

相关推荐