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,这是行不通的。