zon*_*eil 15 java android realm
我正在使用Realm for Android来存储一些数据.当用户按下注销按钮时,我想清除整个Realm数据库.为此,我有以下代码片段:
realm.close();
realm.deleteRealmFile(this);
goToLoginActivity();
Run Code Online (Sandbox Code Playgroud)
现在问题出在我的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
}
Run Code Online (Sandbox Code Playgroud)
如何查看领域对象是否已经关闭?或者,是否有更好的方法来清除数据库而不是删除领域文件?
-
编辑:刚刚看到如何轻松删除Realm for iOS中的所有对象.关于何时deleteAllObjects API可用于Android的任何消息?在撰写本文时,Android的版本为0.80.0,API在iOS中以0.87.0的形式提供.
RealmObjects有一个isValid()方法,如果在数据库中删除了对象或者关闭了Realm,它将返回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
}
Run Code Online (Sandbox Code Playgroud)
删除所有
android API有一个Realm.clear(Class clazz)方法可以做同样的事情.http://realm.io/docs/java/api/io/realm/Realm.html#clear-java.lang.Class-这是为了模仿Collection API的其余部分,但我可以看到关于它的混乱iOS API.
要检查领域实例是否已关闭,请使用 Realm 的方法isClosed:
if(realm.isClosed()) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
要删除所有Realm对象而不删除realm文件,可以使用Realm的clear方法;不幸的是你必须传递 RealmObject 的类:
Realm realm = Realm.getInstance(context);
realm.beginTransaction();
realm.clear(SomeClass.class);
realm.clear(AnotherClass.class);
realm.commitTransaction();
realm.close();
Run Code Online (Sandbox Code Playgroud)