在Android中获取内容提供商uri崩溃

时间:2019-02-20 13:11:40

标签: android kotlin

我的设备上具有以下文件路径

file:///storage/emulated/0/DCIM/IMG_20190206_141330.jpg

我正在尝试为其提供内容提供商,以便能够在kotlin中使用此方法旋转它

private fun Uri.getPath(ctx: Context): String? {
    val projection = arrayOf(MediaStore.Images.Media.DATA)
    val cursor = ctx.contentResolver.query(this, projection, null, null, null) ?: return null
    val columnIndex = cursor.getColumnIndexOrThrow(projection[0])
    cursor.moveToFirst()
    val s = cursor.getString(columnIndex)
    cursor.close()
    return s
}

我遇到了以下崩溃

 java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.i(Log.java:198)
        at com.forsale.app.utils.UriExtensionsKt.rotateImageIfRequired(UriExtensions.kt:80)
        at com.forsale.app.features.postad.basicinformation.PostAdBasicInformationFragment$onActivityResult$$inlined$let$lambda$1.invokeSuspend(PostAdBasicInformationFragment.kt:254)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32)
        at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:236)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

  

我正在尝试为其提供内容提供商

那是行不通的。内容Uri具有content://作为方案。您的方案有file://

  

使其能够旋转

您可以摆脱Uri.getPath()(对于大多数Uri值不起作用,即使是使用content://方案的值也是如此)。在openInputStream()上使用ContentResovlerInputStream所标识的内容上打开Uri(对content://file:// {{1均适用}}值)。然后,使用该Uri读取图像以旋转它。