我目前有以下工作代码,用于将设备中现有的用户选择的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()仅从文件创建数据库。如果要将其用于导入或从备份还原方案,我认为您需要先关闭并删除现有数据库,然后再尝试使用后者的代码片段。

07-27 19:17