您如何检查领域实例是否已经关闭?
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();
我正在使用 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();