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

时间:2015-04-15 21:23:58

标签: java android realm

我使用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
}

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

-

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

3 个答案:

答案 0 :(得分:7)

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
}

全部删除

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

答案 1 :(得分:2)

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

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

要删除所有没有deleting the realm file的Realm对象,可以使用Realm的方法clear;不幸的是,你必须传递RealmObject的类:

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

答案 2 :(得分:1)

相反,这样做:

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

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