Android 使用 Intent 保存和写入文本文件,获取 IOException "No content provider"
Android Save and Write Text File with Intent, getting IOException "No content provider"
当我尝试将内容写入使用 Intent 创建的文件时出现异常。
错误是 IOException 错误
"No content provider:Intent {...}".
我在“我的云端硬盘”中看到创建的文件,但没有内容。
我想将文本输出到文本文件。这是将数据输出到音频 wav 文件的一步。
我基本上是在做这个教程,除了我使用的是 Kotlin:
https://www.youtube.com/watch?v=CGD1Kr7A77Y&ab_channel=Sam%27sAndroidClassroom
代码在 Activity 文件中。 “buttonFiles”是我要添加 Click Listerner 的按钮。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_extra)
buttonFiles.setOnClickListener{
val intent = Intent()
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("text/plain")
.putExtra(Intent.EXTRA_TITLE, "testFileSam.txt")
.setAction(Intent.ACTION_CREATE_DOCUMENT)
startActivityForResult(Intent.createChooser(intent, "text file"), 1)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1 && resultCode == RESULT_OK) {
var uri = data
try{
if(uri != null) {
var outputStream = contentResolver.openOutputStream(Uri.parse(uri.toString()))
val charset = Charsets.UTF_8
outputStream?.write("Hello, is anybody out there!!!".toByteArray(charset))
}
}catch( e: IOException){
Log.d("Debug"," IOException = " + e.message)
}
}
}
var uri = data
data
是一个 Intent?
。您将其分配给名为 uri
的变量,这让我们俩都感到困惑。
将其更改为:
val uri = data?.data
现在,uri
将是 Uri?
。您可以将其与 null
检查一起使用。并且,从那里,您可以使用 contentResolver.openOutputStream(uri.toString())
打开 OutputStream
.
这也是您最初 运行 遇到问题的原因。您创建了一个 Intent
的字符串表示形式,然后尝试将其解析为 Uri
,这是行不通的。
当我尝试将内容写入使用 Intent 创建的文件时出现异常。
错误是 IOException 错误
"No content provider:Intent {...}".
我在“我的云端硬盘”中看到创建的文件,但没有内容。
我想将文本输出到文本文件。这是将数据输出到音频 wav 文件的一步。
我基本上是在做这个教程,除了我使用的是 Kotlin: https://www.youtube.com/watch?v=CGD1Kr7A77Y&ab_channel=Sam%27sAndroidClassroom
代码在 Activity 文件中。 “buttonFiles”是我要添加 Click Listerner 的按钮。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_extra)
buttonFiles.setOnClickListener{
val intent = Intent()
.addCategory(Intent.CATEGORY_OPENABLE)
.setType("text/plain")
.putExtra(Intent.EXTRA_TITLE, "testFileSam.txt")
.setAction(Intent.ACTION_CREATE_DOCUMENT)
startActivityForResult(Intent.createChooser(intent, "text file"), 1)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1 && resultCode == RESULT_OK) {
var uri = data
try{
if(uri != null) {
var outputStream = contentResolver.openOutputStream(Uri.parse(uri.toString()))
val charset = Charsets.UTF_8
outputStream?.write("Hello, is anybody out there!!!".toByteArray(charset))
}
}catch( e: IOException){
Log.d("Debug"," IOException = " + e.message)
}
}
}
var uri = data
data
是一个 Intent?
。您将其分配给名为 uri
的变量,这让我们俩都感到困惑。
将其更改为:
val uri = data?.data
现在,uri
将是 Uri?
。您可以将其与 null
检查一起使用。并且,从那里,您可以使用 contentResolver.openOutputStream(uri.toString())
打开 OutputStream
.
这也是您最初 运行 遇到问题的原因。您创建了一个 Intent
的字符串表示形式,然后尝试将其解析为 Uri
,这是行不通的。