![](/img/trans.png)
[英]ContentResolver.query: CursorIndexOutOfBoundsException
[英]Why is contentResolver.query() returning null?
我將AWS S3TransferUtilitySample從Java重構為Kotlin,並在嘗試上傳圖像時遇到異常。 在圖庫意圖返回帶有圖像URI的應用程序后,我將錯誤跟蹤到了。 在onActivityResult
, getContentResolver.query(...)
是問題所在。
cursor = getContentResolver().query(uri, projection, selection, selectionArgs, null);
將我的代碼翻譯成 cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
。 此時的query
參數值為:
uri
: content://media/external/images/media
projection
: {"_data"}
selection
: "_id=?"
selectionArgs
: {"3812"}
sortOrder
: null
我查看了contentResolver
的文檔,我認為我可能錯誤地解開了查詢參數。 我看到了這個答案 ,但沒有任何幫助。 有什么建議么?
這是一個權限錯誤。 在Logcat中,我看到了
2019-07-30 09:32:57.566 11640-12481/? E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=13823, uid=10149 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:633)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:503)
at android.content.ContentProvider$Transport.query(ContentProvider.java:214)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:102)
at android.os.Binder.execTransact(Binder.java:697)
然后,我看到我已經預先注釋了權限代碼,以更好地了解正在發生的事情。 任務完成了。 實際上,我只是刪除了注釋的代碼,並從頭開始編寫了代碼,以使本課程回國。
修復問題的方法如下:
AndroidManifest.xml
添加權限 <uses-permission android:name=“android.permission.READ_EXTERNAL_STORAGE”/>
buttonUploadImage!!.setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val permissions = arrayOf(permission.READ_EXTERNAL_STORAGE)
val intent = Intent()
intent.action = Intent.ACTION_GET_CONTENT
intent.type = "image/*"
if (checkSelfPermission(permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
permission.READ_EXTERNAL_STORAGE)) {
// Explain why the permission is needed
} else {
ActivityCompat.requestPermissions(this, permissions, PERMISSION_CODE)
}
} else {
// Permission has already been granted
startActivityForResult(intent, PERMISSION_CODE)
}
}
}
資源資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.