kotlin.KotlinNullPointerException Файл не найден, только в устройствах Samsung - PullRequest
0 голосов
/ 04 июля 2019

Я использовал этот метод, чтобы получить файл из URI, он отлично работает со всеми устройствами, но только сбой с устройствами Samsung!

fun Activity.getFilePath(uri: Uri): File {
    var cursor: Cursor? = null
    return try {
        val dataArray = arrayOf(MediaStore.Images.Media.DATA)
        cursor = contentResolver.query(uri, dataArray, null, null, null)
        val index = cursor?.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
        cursor?.moveToFirst()
        File(index?.let { cursor?.getString(it) })
    } catch (e: Exception) {
        throw KotlinNullPointerException("File not founded")
    } finally {
        cursor?.close()
    }
}

получить изображение из галереи

 fun Activity.chooseImageFromGallery(withAskPermission: Boolean) {
    if (isPermissionsGranted(Manifest.permission.READ_EXTERNAL_STORAGE)) {
        val intent = Intent(Intent.ACTION_PICK,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST)
    } else {
        if (withAskPermission && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
                    PICK_IMAGE_REQUEST)
        }
    }
}

по результатам деятельности

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_IMAGE_REQUEST) {
        uri = data?.data
        file = uri?.let { activity?.getFilePath(it) }
        //
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...