Как прочитать файл JSON из пути, используя Kotlin - PullRequest
2 голосов
/ 29 апреля 2019

Я пытаюсь открыть средство выбора файлов в Android, выбрать файл JSON, а затем получить текст из него.Приложение вылетает после выбора файла, потому что не удается найти путь.

Я попытался добавить разрешение на чтение / запись во внешнем хранилище и изменить формат пути

/// some Activity code
val myFileIntent=Intent()
.setType("*/*")
.setAction(Intent.ACTION_GET_CONTENT)
startActivityForResult(myFileIntent,10)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        val path = data!!.data.path
        val jsonContent = File(path).readText()
    }

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Я пытаюсь открыть средство выбора файлов в Android

Это не средство выбора файлов. Это позволяет пользователю выбирать контент, который может быть, а может и не быть файлом.

Приложение вылетает после выбора файла

Вы не выбираете файл. Вы выбираете кусок контента. Это содержимое идентифицируется Uri, а схема вашего Uri равна content, а не file.

Используйте ContentResolver и openInputStream(), чтобы получить InputStream для содержимого, обозначенного Uri. Вы можете позвонить readText() на этом InputStream, чтобы прочитать его как текст.

0 голосов
/ 29 апреля 2019

Это мой последний рабочий код:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        val path = data?.data
        val jsonSelectedFile =  contentResolver.openInputStream(path);
        val inputAsString = jsonSelectedFile.bufferedReader().use { it.readText() }

        Toast.makeText(this, "Json: " +  inputAsString , Toast.LENGTH_LONG).show()
    }

А для звонков:

 importJsonButton.setOnClickListener {
            val myFileIntent = Intent()
                .setType("*/*")
                .setAction(Intent.ACTION_GET_CONTENT)

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