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

Posted

技术标签:

【中文标题】如何在 Android 中清除 Realm 中的数据库【英文标题】:How to Clear Database in Realm in Android 【发布时间】:2016-10-05 12:12:50 【问题描述】:

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

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.
    

但是这两个代码都不起作用。 提前致谢。

【问题讨论】:

【参考方案1】:

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

或者您可以在事务块中调用Realm.delelteAll()。这不需要关闭所有 Realm 实例。它只会删除领域中的所有对象而不清除模式。同样,不要捕获所有异常。

【讨论】:

这两种方法是否也会清除RealmConfiguration#initialData()提供的数据? 对于最新版本 4.3,您还需要提供领域配置,例如Realm.deleteRealm(Realm.getDefaultConfiguration()) 如果我们使用领域云,那么它会从服务器中删除所有数据吗? 有没有办法在不确保所有 Realm 实例都关闭的情况下强制删除数据库? 在 rn 中(至少)你需要在你的开放领域实例上在这样的写块中调用它:export async function deleteAll() const realm = await Realm.open( path: ' myrealm',架构:架构,); realm.write(async () => await realm.deleteAll(); ); 【参考方案2】:

如果您确定没有要保存的任何其他数据库,您也可以删除所有其他数据。你可以按照这个答案 Clear Application's Data Programmatically

【讨论】:

以上是关于如何在 Android 中清除 Realm 中的数据库的主要内容,如果未能解决你的问题,请参考以下文章

在android中删除Realm中的单个对象数据/行

Realm android中的逻辑AND操作

如何从 Realm Database Android 中删除对象?

正确的Realm Migration Android方式

在循环中使用Realm或在Android中插入列表

导航到Android中的另一个片段后如何清除导航堆栈