繁体   English   中英

为什么contentResolver.query()返回null?

[英]Why is contentResolver.query() returning null?

我将AWS S3TransferUtilitySample从Java重构为Kotlin,并在尝试上传图像时遇到异常。 在图库意图返回带有图像URI的应用程序后,我将错误跟踪到了。 onActivityResultgetContentResolver.query(...)是问题所在。

  • Java cursor = getContentResolver().query(uri, projection, selection, selectionArgs, null); 将我的代码翻译成
  • Kotlin cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)

此时的query参数值为:

  • uricontent://media/external/images/media
  • projection{"_data"}
  • selection"_id=?"
  • selectionArgs{"3812"}
  • sortOrdernull

我查看了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM