![](/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.