Android 如何使用kotlin从path读取json文件

Android 如何使用kotlin从path读取json文件,android,json,kotlin,Android,Json,Kotlin,我试图在android中打开一个文件选择器,选择一个json文件,然后从中获取文本。 我选择文件后,应用程序崩溃,因为它找不到路径 我已尝试添加外部存储器读/写权限并更改路径格式 /// some Activity code val myFileIntent=Intent() .setType("*/*") .setAction(Intent.ACTION_GET_CONTENT) startActivityForResult(myFileIntent,10) override fun onA

我试图在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()
    }
我正在尝试用android打开一个文件选择器

这不是一个文件选择器。这允许用户选择一段内容,该内容可能是文件,也可能不是文件

我选择文件后应用程序崩溃

您没有选择文件。您正在挑选一部分内容。该内容由
Uri
标识,并且
Uri
的方案是
内容
,而不是
文件


使用
ContentResolver
openInputStream()
Uri
标识的内容上获取
InputStream
。您可以在该
InputStream
上调用
readText()
,将其作为文本读入。

这是我最后的工作代码:

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)
        }

请发布stacktraceHi,这可能是由java.io.FileInputStream.open0(本机方法)的java.io.FileInputStream.open(FileInputStream.java:231)的java.io.FileInputStream.open(FileInputStream.java:231)引起的。(FileInputStream.java:165)在kotlin.io.FilesKt\uuuu FileReadWriteKt.readBytes(FileReadWrite.kt:63)在kotlin.io.FilesKt\uuuu FileReadWriteKt.readText(FileReadWrite.kt:101)你对我如何实现它有什么建议吗?这不能做到。你不能调用readText()在那个输入流上读取它作为文本。@TeodorRadu:啊,对不起,我记错了。你需要将
InputStream
转换成
BufferedReader