Android Kotlin ACTION_CREATE_文档提供了非工作URI
我正在尝试将SQLiteDatabase导出到文件。我正在使用ACTION_CREATE_DOCUMENT意图获取文件。它向我显示对话框,正确填写所有内容,并以零大小创建文件。我可以使用文件管理器查看文件。然而,当我检查onActivityResult时,传递给这个方法的Uri看起来是坏的。当我尝试使用Android Kotlin ACTION_CREATE_文档提供了非工作URI,android,kotlin,Android,Kotlin,我正在尝试将SQLiteDatabase导出到文件。我正在使用ACTION_CREATE_DOCUMENT意图获取文件。它向我显示对话框,正确填写所有内容,并以零大小创建文件。我可以使用文件管理器查看文件。然而,当我检查onActivityResult时,传递给这个方法的Uri看起来是坏的。当我尝试使用Uri.path创建文件时,会出现IOExceptions(找不到文件) val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
Uri.path创建文件时,会出现IOExceptions(找不到文件)
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_DEFAULT)
type = "application/x-sqlite3"
putExtra(Intent.EXTRA_TITLE, "export.db")
putExtra(DocumentsContract.EXTRA_INITIAL_URI, Environment.DIRECTORY_DOCUMENTS)
}
startActivityForResult(intent!!,4711)
我可以看到正确的文件名,如果我在对话框中按save
,我将以Activity.RESULT\u OK
结束。但是uri看起来像content://com.android.providers.downloads.documents/document/26
和uri.path是/document/26
,这给了我IO异常
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
super.onActivityResult(requestCode, resultCode, resultData)
if (requestCode == 4711 && resultCode == Activity.RESULT_OK) {
resultData?.data?.also { documentUri ->
try {
val db = DBBackend(context!!)
val dbFile = File(db.getDatabaseFilename())
var exportFile = File(documentUri.path)
exportFile.createNewFile()
dbFile.copyTo(exportFile)
}
catch( error : Exception )
{
Log.e("FileError", error.toString() )
Toast.makeText(context!!,"error: ${error.toString()}", Toast.LENGTH_LONG).show()
}
}
}
}
这对我来说毫无意义。
在下载文件夹中获取可写文件的正确方法是什么
谢谢你的提示嗨。您可以在获取此异常的位置添加日志猫吗?您可以在文件室的上下文中,使用操作\u创建\u文档
,在中找到数据库导入/导出的完整工作示例。FWIW,它包含在中。这是一个非常正常的uri。而且,您不能将它的一部分用于File类,因为它不是文件系统路径。您应该为uri打开一个输出流,然后将数据库内容写入其中。