Android 如何使用kotlin从path读取json文件
我试图在android中打开一个文件选择器,选择一个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
/// 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
: