我目前有以下工作代码,用于将设备中现有的用户选择的SQLite数据库文件导入到我的应用程序中,该文件已经具有数据库:
// here goes code to .close() the app's db if isOpen()
// val userChosenUri: Uri? = data?.data
val outStream = getDatabasePath(DATABASE_NAME).outputStream()
val inStream = userChosenUri.toString().let {
userChosenUri?.let { it1 ->
contentResolver.openInputStream(
it1
)
}
}
inStream.use { input ->
outStream.use { output ->
if (output != null) {
input?.copyTo(output)
}
}
}
我正在尝试将其替换为在Android Room指南中找到的代码:
Room.databaseBuilder(this, AppDatabase::class.java, DATABASE_NAME)
.createFromFile(File(userChosenUri!!.path))
.build()
但是最后一个片段似乎没有任何作用。它不会崩溃,但也不会替换数据库。
有人知道我在想什么吗?
最佳答案
AFAIK,如果数据库尚不存在,createFromFile()
仅从文件创建数据库。如果要将其用于导入或从备份还原方案,我认为您需要先关闭并删除现有数据库,然后再尝试使用后者的代码片段。