我的设备上具有以下文件路径
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)
有人可以帮忙吗?
答案 0 :(得分:1)
我正在尝试为其提供内容提供商
那是行不通的。内容Uri
具有content://
作为方案。您的方案有file://
。
使其能够旋转
您可以摆脱Uri.getPath()
(对于大多数Uri
值不起作用,即使是使用content://
方案的值也是如此)。在openInputStream()
上使用ContentResovler
在InputStream
所标识的内容上打开Uri
(对content://
和file://
{{1均适用}}值)。然后,使用该Uri
读取图像以旋转它。