如何检查领域实例是否已关闭?

2022-09-03 07:35:26

我正在使用Realm for Android来存储一些数据。当用户按下注销按钮时,我想清除整个 Realm 数据库。为此,我有以下代码片段:

realm.close();
realm.deleteRealmFile(this);
goToLoginActivity();

现在的问题出在我的 onResume 函数中。我得到以下异常:

由以下原因引起:java.lang.IllegalStateException:此 Realm 实例已关闭,使其无法使用。

我的onResume代码如下:

@Override
protected void onResume() {
    super.onResume();

    // I'm trying to check if the realm is closed; this does not work
    if (realm == null) {
        realm = Realm.getInstance(this);
    }

    // Do query using realm
}

如何检查领域对象是否已关闭?或者,有没有比删除领域文件更好的方法来清除数据库?

--

编辑:刚刚看到如何轻松删除 Realm for iOS 中的所有对象。关于deleteAllObjects API何时可用于Android的任何消息?在撰写本文时,Android的版本为0.80.0,该API在iOS的0.87.0中可用。


答案 1

RealmObjects 有一个方法,如果对象在数据库中被删除或 Realm 数据库已关闭,它将返回 false,例如。isValid()

Realm realm = Realm.getInstance(getContext());
Foo foo = realm.allObjects(Foo.class).findFirst();
if (foo.isValid()) {
  // Do something with Foo
} else {
  // Any operation will throw a IllegalStateException
}

全部删除

Android API有一个做同样的事情的方法。http://realm.io/docs/java/api/io/realm/Realm.html#clear-java.lang.Class-这是为了模仿集合API的其余部分,但我可以看到iOS API方面的混乱。Realm.clear(Class clazz)


答案 2

要检查领域实例是否已关闭,请使用领域方法 isClosed

if(realm.isClosed()) {
    // Do something
}

要删除所有 Realm 对象而不删除 Realm 文件,您可以使用 Realm 的方法 clear;不幸的是,你必须通过 RealmObject 的类:

Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.clear(SomeClass.class);
realm.clear(AnotherClass.class);
realm.commitTransaction();
realm.close();

推荐