【问题标题】:Room database is still alive after deleting database删除数据库后房间数据库仍然存在
【发布时间】:2021-02-24 14:24:06
【问题描述】:

我已经删除了房间数据库,但我仍然可以在我的数据库检查器中看到之前的行,除非我手动终止应用程序并重新打开它。 该方案正在注销并重新打开登录活动。 代码sn-p:

class MyAppCompatActivity:AppCompatActivity(){
//...
 private fun logOut() {
        MyAppDatabase.getInstance(context).clearAllTables()
        MyAppDatabase.getInstance(context).close()
        deleteDatabase(MyAppDatabase.DATABASE_NAME)
        MyFileUtil.deleteDir(cacheDir)
        MyFileUtil.deleteDir(filesDir)
     }
}
object MyFileUtil{ 
  fun deleteDir(dir: File?): Boolean {
        return if (dir != null && dir.isDirectory) {
            val children = dir.list()
            for (i in children.indices) {
                val success = deleteDir(File(dir, children[i]))
                if (!success) {
                    return false
                }
            }
            dir.delete()
        } else if (dir != null && dir.isFile) {
            dir.delete()
        } else {
            false
        }
    }
}

有谁知道如何清理我的数据库并通过以编程方式杀死应用程序之类的行为快速重新打开我的活动?

【问题讨论】:

  • 请分享你的道

标签: android database kotlin android-room


【解决方案1】:

您确定要删除数据库文件吗?那些FileUtil API 让我相信你没有删除 Android 默认放置数据库的database 文件夹。

您可以通过getDatabasePath() 或更好的方式获取目录,使用deleteDatabase() 使用您传递给Room 构建器的相同“名称”删除它们。

另外,在实际删除数据库之前,请务必在数据库上调用close(),否则会遇到麻烦。

【讨论】:

  • 谢谢,但是 FileUtil 是我写的,它是一个自定义类。我做了deleteDatabase(),它没有用。我已经更新了我的问题,使用“close()”包含的代码更清楚。
【解决方案2】:

您可以从RoomDatabase 致电clearAllTables()。这样一来,Room 将从实体创建的表中删除所有行。

来源:https://developer.android.com/reference/androidx/room/RoomDatabase#clearAllTables()

这不会重置设置为自动递增的主键的计数器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多