Android Kotlin (новичок) - использование File () с Uri, возвращенным из ACTION_GET_CONTENT - PullRequest
0 голосов
/ 06 мая 2018

Я очень плохо знаком с Android и Kotlin / Java. Я не понимаю, почему мой File() метод получает ошибку:

ни одна из следующих функций не может быть вызвана с предоставленными аргументами.

Я думал, что то, что я положил, должно возвращать Uri, полученный из ACTION_GET_CONTENT, и этого должно быть достаточно для создания объекта File. Я пытаюсь сделать приложение, которое будет загружать текстовый файл и отображать его. Я надеюсь, что это где-то очень простая ошибка:

fun showFileDialog() {
    val fileintent = Intent(Intent.ACTION_GET_CONTENT)
    fileintent.setType("text/plain")
    fileintent.addCategory(Intent.CATEGORY_OPENABLE)
    startActivityForResult(fileintent, FILE_SELECT_CODE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
    super.onActivityResult(requestCode, resultCode, data)
    if(requestCode == FILE_SELECT_CODE && resultCode == Activity.RESULT_OK) {
        val selectedfile = File(data!!.data)
        val readData = FileInputStream(selectedfile).bufferedReader().use { it.readText
            textView.text = readData
        }
    }
}

Я не знаю, работает ли остальная часть опубликованного кода, но эта ошибка не позволит мне собрать его для тестирования. TIA для любой помощи / указателей

ПОСТАНОВИЛИ:

Первый ответ объяснил, почему я получаю ошибку (следовательно, отвечаю на мой вопрос)

После получения справки из второго ответа и комментария ниже (и больше поиска по SO; см. Ссылки ниже) я изменил свои последние 3 строки кода на:

val input: InputStream = getContentResolver().openInputStream(data!!.data)
val inputAsString = input.bufferedReader().use { it.readText() }
textView.setText(inputAsString)

и это работает хорошо. Спасибо!

ССЫЛКА:

Android: получение URI файла из URI контента?

В Kotlin как мне прочитать все содержимое InputStream в строку?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы не должны использовать класс File для uri, полученного ACTION_GET_CONTENT.

Также вы не должны выводить путь к файлу из этого URI, чтобы использовать класс File на нем.

Вместо этого вам следует непосредственно открыть входной поток для полученного URI, если вы хотите прочитать его содержимое.

0 голосов
/ 06 мая 2018

Хотя я не могу комментировать остальную часть вашего кода, data!!.data возвращает a android.Uri, а File принимает String [1].

Вы должны преобразовать свой Uri в имя файла: что-то вроде File(data!!data.getPath()); [2]

[1]. Он также принимает URI, но это Java.net.URI, а не Android.Uri.

[2]. Вы все равно должны убедиться, что вы получаете Uri, который указывает на путь в файловой системе. Вам также может понадобиться сделать что-то вроде this .

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