java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri
我对Android和Kotlin/Java都很陌生。我不明白为什么我的File()
方法会出错:
none of the following functions can be called with the arguments supplied.
我认为我所放置的应该返回从ACTION_GET_CONTENT
获取的Uri,这应该足以构造File对象。我正在尝试制作一个应用程序,将加载一个txt文件并显示它。我希望这是一个非常简单的错误:
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需要任何帮助/提示吗
决议:
第一个答案解释了我为什么会出错(因此,回答了我的问题)
在获得下面第二个答案和评论的帮助后(以及更多搜索,请参阅下面的链接),我将最后3行代码更改为:
val input: InputStream = getContentResolver().openInputStream(data!!.data)
val inputAsString = input.bufferedReader().use { it.readText() }
textView.setText(inputAsString)
这很有效。谢谢大家!
链接:
Android: Getting a file URI from a content URI?
In Kotlin, how do I read the entire contents of an InputStream into a String?
# 1 楼答案
虽然我无法对代码的其余部分进行注释,}和
data!!.data
{a1}{File
采用了String[1]您必须将Uri转换为文件名:类似于
File(data!!data.getPath());
[2][1]。它还需要一个URI,但这是一个Java。网URI,而不是Android。乌里
[2]。您仍然应该确保您得到的Uri指向文件系统上的路径。您可能还必须执行类似this的操作
# 2 楼答案
您不应该将File类用于由
ACTION_GET_CONTENT
获得的uri您也不应该从该uri推断文件路径以在其上使用文件类
相反,如果要读取获取的uri的内容,则应该直接为其打开inputstream