2 amani nakupenda Amani_Nakupenda 于 2016.02.19 13:15 提问

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
Amani_Nakupenda   2016.02.19 16:00
已采纳
Amani_Nakupenda
Amani_Nakupenda 回复qq_24793481: 看楼下
一年多之前 回复
Amani_Nakupenda
Amani_Nakupenda 回复qq_28496403: 看楼下
一年多之前 回复
qq_28496403
qq_28496403 根本不能用啊,求解决方法
一年多之前 回复
qq_24793481
qq_24793481 网页点不开啊,能不能说一下啊谢谢
一年多之前 回复
luochoudan
luochoudan   Ds   Rxr 2016.02.19 23:05

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

yuxiuj
yuxiuj   2016.08.11 15:16

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

Amani_Nakupenda
Amani_Nakupenda 看楼下
一年多之前 回复
u012892687
u012892687   2016.08.15 14:53

同问,请问是如何解决的

Amani_Nakupenda
Amani_Nakupenda 看楼下
一年多之前 回复
qq_28496403
qq_28496403   2016.08.19 16:09

跪求啊,怎么解决的啊

Amani_Nakupenda
Amani_Nakupenda 看楼下
一年多之前 回复
Amani_Nakupenda
Amani_Nakupenda   2016.08.30 16: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;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!