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

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

yuxiuj
yuxiuj   2016.08.11 15:16

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

Amani_Nakupenda
Amani_Nakupenda 看楼下
接近 2 年之前 回复
u012892687
u012892687   2016.08.15 14:53

同问,请问是如何解决的

Amani_Nakupenda
Amani_Nakupenda 看楼下
接近 2 年之前 回复
qq_28496403
qq_28496403   2016.08.19 16:09

跪求啊,怎么解决的啊

Amani_Nakupenda
Amani_Nakupenda 看楼下
接近 2 年之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android getContentResolver().query结果为空指针
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePat
Android---相册getContentResolver().query结果为空指针
相册getContentResolver().query结果为空指针怎么办?
getContentResolver()空指针原因及处理办法
getContentResolver()空指针原因及处理办法
Android---相册getContentResolver().query结果为空指针(因为android版本引起)
针对公司14年代码在小米6手机上图片选择不上,原来因为android版本升级,uri形式变化所致 测试如下代码: [java] view plain copy  Uri uri = data.getData();   String[] proj = {MediaStore.Images.Media.DATA};   //Cursor cursor = mana
android 取相册 图片 getContentResolver().query 返回空。
android开发一步一坑,要想适配这种机型覆盖各种版本真是要花点功夫。 今天来说说从系统相册取照片这么一个简单的事情。 一般情况下我们只需要调用系统相册然后在onActivityResult里面接收图片地址剩下的就自己处理就行了。 代码:private void getPhoto(){ // 相册挑选一张 Intent photoPickerInten
getContentResolver().query 和 managedQuery 的区别
getContentResolver().query managedQuery 区别 android
managedQuery 和 getContentResolver().query的区别
Activity 里面提供了一个 managedQuery() 方法,按照 Android SDK 里面的说明,“the activity will manage its lifecycle for you.” 听起来很好,Activity 可以替你管理 Cursor 的生命周期了,就不用记着去 close() 了,代码可以更简洁。 但是 Activity 是怎么去管理 Cursor 的
getContentResolver().query()方法selection参数使用详解
有时候,我们需要对查询的数据库结果进行去重。在SQL中我们可以通过distinct关键字实现,但是当我们使用android提供的managedQuery()或getContentResolver().query()方法对数据库进行查询时,并不能使用distinct关键字。那么,如何解决呢? 首先,让我们来了解一下android中query方法吧。   当我们调用android系统的qu
getContentResolver().insert returns null
当我像通话记录数据库批量添加通话记录时,总出现开机后可以添加成功,但是多添加几次就不能添加了,之后再怎样操作都无济于事,找到原因是:我在批量插入时每一次插入都开了一个线程,这样本想为了省时,但是 似乎是因为多个线程同时进行插入操作导致阻塞,使得再也不能插入成功
getContentResolver()
ContentProvider-----数据提供给第三方应用程序使用时使用  因为在Android系统里面,数据库是私有的。一般情况下外部应用程序是没有权限读取其他应用程序的数据。如果你想公开你自己的数据, 你有两个选择:你可以创建你自己的内容提供器(一个ContentProvider子类)或者你可以给已有的提供器添加数据-如果存在一个控制同样类型数据的内容提供器且你拥有写的权限。