如何在Android中清除Realm中的数据库

问题描述 投票:0回答:3

我想在用户按下注销按钮时清除整个数据库,并在另一个用户登录时加载新数据。我尝试了很多解决方案,例如

try {
        Realm.deleteRealm(realmConfiguration);   
    } catch (Exception ex){
        throw ex;
    }

还有

 try {
        Realm.deleteRealmFile(getActivity());
        //Realm file has been deleted.
    } catch (Exception ex){
        ex.printStackTrace();
        //No Realm file to remove.
    }

但是这两个代码都不起作用。 预先感谢。

android realm
3个回答
49
投票

当你调用

Realm.deleteRealm()
时,你必须确保所有Realm实例都已关闭,否则会抛出异常而不会删除任何内容。通过调用此方法,所有 Realm 文件都将被删除,这意味着所有对象和模式都消失了。对于任何一般情况来说,捕获所有异常都是不好的做法。

或者您可以在交易块中调用

Realm.delelteAll()
。这不需要关闭所有 Realm 实例。它只会删除 Realm 中的所有对象,而不会清除架构。再说一遍,不要捕获所有异常。


1
投票

如果您确定没有任何其他数据库要保存,您也可以删除所有其他数据。你可以关注这个答案 以编程方式清除应用程序的数据


0
投票

如果您使用

deleteRealmIfMigrationNeeded

,您只需更新您的领域模式版本即可
override fun onCreate() {
    super.onCreate()
    //add support for vector drawables on older APIs
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
    //init realm
    Realm.init(this)
    mApp = this

    //init set realm configs
    val realmConfiguration = RealmConfiguration.Builder()
        .schemaVersion(2) //if you used 1 before
        .allowQueriesOnUiThread(true)
        .allowWritesOnUiThread(true)
        .deleteRealmIfMigrationNeeded()// if migration needed then this methoud will remove the existing database and will create new database
        .build()
    Realm.setDefaultConfiguration(realmConfiguration)
© www.soinside.com 2019 - 2024. All rights reserved.