Cursor android.content.ContentResolver.query() on a null object reference和Caused by: java.lang.Secur

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.content.ContentResolver.query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)' on a null object reference

// 获得图片的代码
Cursor mCursor = contentResolver.query(mImageUri, null,
        MediaStore.Images.Media.MIME_TYPE + "=? or "
                + MediaStore.Images.Media.MIME_TYPE + "=?",
        new String[] { "image/jpeg", "image/png" },MediaStore.Images.Media.DATE_MODIFIED);

检查后发现,忘了初始化

contentResolver = this.getContentResolver();

ok再跑

 Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=24777, uid=10098 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
        at android.content.ContentResolver.query(ContentResolver.java:506)
        at android.content.ContentResolver.query(ContentResolver.java:441)
        at com.example.pic.picmanager.MainActivity.getImage(MainActivity.java:34)
        at com.example.pic.picmanager.MainActivity.onCreate(MainActivity.java:28)
        at android.app.Activity.performCreate(Activity.java:6367)

嗯 忘记了权限的问题,在manifest文件里面加入一下代码,

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

并且注意在6.0以后文件存储等权限不仅需要在清单文件中注明,还需要动态申请;

public void requestPower() {
    //判断是否已经赋予权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            //申请权限,字符串数组内是一个或多个要申请的权限,1是申请权限结果的返回参数,在onRequestPermissionsResult可以得知申请结果
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,}, 1);
    }
}

拿到了我需要的图片信息

猜你喜欢

转载自blog.csdn.net/dream_miracle/article/details/82181080