получить провайдер контента URI в Android - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть следующий путь к файлу на моем устройстве

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 голосов
/ 20 февраля 2019

Я пытаюсь получить для него контент-провайдера

Это не сработает.Контент Uri имеет content:// в качестве схемы.Ваша схема имеет file://.

, чтобы она могла вращаться

Вы можете избавиться от Uri.getPath() (что не будет работать для большинстваUri значений, даже с content:// схемами).Используйте openInputStream() для ContentResovler, чтобы открыть InputStream для содержимого, обозначенного Uri (работает как для значений content://, так и file:// Uri).Затем используйте это InputStream, чтобы прочитать изображение, чтобы повернуть его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...