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

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的形式提供.

Chr*_*ior 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
}
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.


gri*_*rim 4

要检查领域实例是否已关闭,请使用 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)