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

How do you check if a realm instance has been closed already?

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

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
}

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

--

编辑:刚看到 How can I easily delete all objects in a Realm iOS。关于 deleteAllObjects API 何时可用于 Android 的任何消息?在撰写本文时,Android 的版本为 0.80.0,API 在 0.87.0 的 iOS 中可用。

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

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

的混淆

相反,这样做:

if (realm != null) {
  realm.close();
  realm = null;
}

这样一来,您就不必验证领域对象是否已关闭,而只需检查它是否为空。

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

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

删除所有没有deleting the realm file, you can use Realm's method clear的Realm对象;不幸的是你必须通过 RealmObject 的 class:

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