File в onActivityResult
Пишу приложение под андроид. Необходимо отправить фотку на сервер. Для этого из фрагмента запускаю startActivityForResult() При попытке по Uri получить файл вылетают разного рода ошибки.
## Код ##
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
GlobalScope.launch {
try {
val imageUri = data?.data ?: throw LoadImageException()
val file = imageUri.toFile()
vm.showToast(file.absolutePath)
val result = Http.sendFile(vm.getUserID(), file)
if (result == -1) throw LoadImageException()
else vm.showToast("Успешно")
} catch (e: LoadImageException) {
vm.showToast("Не удалось загрузить изображение")
} catch (e: ConnectException) {
vm.showToast("Не удалось загрузить изображение")
} catch (e: SocketTimeoutException) {
vm.showToast("Не удалось загрузить изображение")
}
}
}
}
private fun changeAvatarDialog() {
AlertDialog.Builder(activity!!).setTitle("Изменить фотографию?")
.setPositiveButton("Да") { _, _ ->
val pickIntent = Intent(Intent.ACTION_PICK)
pickIntent.type = "image/*"
startActivityForResult(pickIntent, 0)
}
.setNegativeButton("Нет") { dialog, _ ->
dialog.cancel()
}
.create().show()
}
После выбора фото через галерею или файловик вылетает с ошибками. Например
Illegal argument Exception: Uri lacks file scheme.
Если вместо imageUri.toFile() использовать File(imageUri.path!!), то вылетает
File not found exception`
Даже не могу представить, где здесь собака зарыта
Ответы (1 шт):
Автор решения: Eugene Krivenja
→ Ссылка
Вот это
val file = imageUri.toFile()
нельзя делать. Не каждый Uri является обьектом файловой системы.
Отсюда и ошибки.
Как работать с Uri, смотрите здесь