web-dev-qa-db-ja.com

レルムインスタンスがすでに閉じられているかどうかをどのように確認しますか?

Android for some dataコードの:

realm.close();
realm.deleteRealmFile(this);
goToLoginActivity();

問題は私のonResume関数にあります。次の例外が発生します。

原因:Java.lang.IllegalStateException:このレルムインスタンスはすでに閉じられているため、使用できません。

私の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の場合。 deleteAllObjects APIがAndroidで利用可能になる時期についての言葉はありますか?執筆時点では、Androidはバージョン0.80.0であり、APIはiOSで0.87.0で使用できます。

15
zongweil

レルムインスタンスが閉じているかどうかを確認するには、レルムのメソッドを使用します isClosed

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

レルムファイルの削除 なしですべてのレルムオブジェクトを削除するには、レルムのメソッド clear ;を使用できます。残念ながら、RealmObjectのクラスを渡す必要があります。

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

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)メソッドがあります。 http://realm.io/docs/Java/api/io/realm/ Realm.html#clear-Java.lang.Class- これはコレクションAPIの残りの部分を模倣するためのものですが、iOSAPIに関して混乱が見られます。

7

代わりに、これを行います。

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

そうすれば、レルムオブジェクトが閉じているかどうかを検証する必要はなく、nullかどうかだけを確認できます。

1
TruMan1