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

Java 如何检查领域实例是否已关闭?,java,android,realm,Java,Android,Realm,我正在使用Realm for Android来存储一些数据。当用户按下注销按钮时,我想清除我的整个领域数据库。为此,我有以下代码片段: realm.close(); realm.deleteRealmFile(this); goToLoginActivity(); 现在的问题是我的onResume函数。我得到以下异常: 原因:java.lang.IllegalStateException:此领域实例已关闭,无法使用。 我的简历代码如下: @Override protected void onR

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

realm.close();
realm.deleteRealmFile(this);
goToLoginActivity();
现在的问题是我的onResume函数。我得到以下异常:

原因:java.lang.IllegalStateException:此领域实例已关闭,无法使用。

我的简历代码如下:

@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
}
如何检查领域对象是否已关闭?或者,有没有比删除领域文件更好的清除数据库的方法

--


编辑:刚刚看到了iOS。关于Android何时可以使用deleteAllObjects API有什么消息吗?在撰写本文时,Android版本为0.80.0,API在0.87.0的iOS中可用。

RealmObjects有一个
isValid()
方法,如果数据库中的对象已删除或领域已关闭,该方法将返回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)
方法,可以做同样的事情。这是为了模仿Collection API的其余部分,但我可以看到与iOS API有关的混淆。

相反,请执行以下操作:

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

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

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

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

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

谢谢你的回复。我不应该使用术语“领域对象”,因为它看起来像是一个重载术语。我实际上指的是类领域的对象。我觉得奇怪的是,为了查看领域是否关闭,必须进行查询。关于Realm.clear,它看起来只清除特定类的所有对象。相比之下,deleteAllObjects将删除领域数据库中的所有对象。有没有比在我所有可能的类上调用Realm.clear更好的方法来获得相同的行为?目前没有,但是如果要清除数据库,可以只删除Realm文件。或者,您必须为每个模型类调用clear()。我不明白,您在
BaseRealm
中有一个名为
checkIfValid()
的方法,该方法指定域是否关闭的条件
if(sharedGroupManager!=null&&!sharedGroupManager.isOpen()){
;为什么这不能公开访问(受保护)?我作为
Realm
进入反射路径的时间是
final
isClosed()
isValid()
?我已选中
isClosed())
然而,这种情况也会出现错误。你能接受格里姆的回答吗?看起来他已经完全满足了你的要求。
Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.clear(SomeClass.class);
realm.clear(AnotherClass.class);
realm.commitTransaction();
realm.close();