mRealm.beginTransaction();
mRealm.clear(AboutItemRealm.class);
mRealm.clear(AgendaItemRealm.class);
mRealm.clear(AttendeesItemRealm.class);
mRealm.clear(DocumentsItemRealm.class);
mRealm.clear(FAQsItemRealm.class);
mRealm.clear(GalleryItemRealm.class);
mRealm.clear(GoodToKnowItemRealm.class);
mRealm.clear(MultiEventItemRealm.class);
mRealm.clear(ReservationItemRealm.class);
mRealm.clear(SingleEventItemRealm.class);
mRealm.clear(SpeakerItemRealm.class);
mRealm.commitTransaction();
mRealm.close();
アプリからログアウトするときは、レルムのデータをクリアする必要があります。このようにすべてのクラスをクリアする必要があるため、すべての構造に対してこのmRealm.clear(ClassName.class)をすべて書き込むことなく、レルムのすべてのデータを削除する方法はありますか? ?
レルム(スキーマ)全体を削除する正しい方法は、次を使用することです。
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
// delete all realm objects
realm.deleteAll();
//commit realm changes
realm.commitTransaction();
これにより、RealmObjectクラスを拡張するすべてのレルムオブジェクトが削除されることに注意してください。
更新されたレルムトランザクション形式の場合
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.deleteAll();
}
});
realm.deleteAll()
はすべての魔法を実行しますが、
何らかの理由で手動で
beginTransaction()
トランザクションを実行する場合を除いて、commitTransaction()
は絶対に使用しないでください。
トランザクション内で例外が発生した場合でもcommitTransaction
になるため、executeTransaction()
を使用するのが最善の方法です。
try {
realm.executeTransaction { realm ->
realm.deleteAll()
}
} finally {
realm?.close()
}
Realmを効率的かつ簡単な方法で本当に使用したい場合は、 この記事 をお読みください。個人的には、公式ドキュメントよりも非常に便利だと思いました
最初にすべてのレルムインスタンスを閉じてから、deleteRealmを呼び出します
public static void removeAllData(Realm realm)
{
try {
realm.close();
Realm.deleteRealm(realm.getConfiguration());
} catch (Exception e) {
Log.e(TAG, "removeAllData:" + e.getMessage());
}
}
Realm.Java
/**
* Deletes the Realm file specified by the given {@link RealmConfiguration} from the filesystem.
* All Realm instances must be closed before calling this method.
*
* @param configuration a {@link RealmConfiguration}.
* @return {@code false} if a file could not be deleted. The failing file will be logged.
* @throws IllegalStateException if not all realm instances are closed.
*/
public static boolean deleteRealm(RealmConfiguration configuration) {
return BaseRealm.deleteRealm(configuration);
}
コメントで言及された例外について:
try (Realm realm = Realm.getInstance(realmConfig)) {
realm.beginTransaction();
//your operations here
realm.commitTransaction();
} catch (Exception e) {
realm.cancelTransaction();
}
このソリューションを試してください。これにより、レルムデータベースが削除されます。
public static boolean deleteRealm(RealmConfiguration configuration)
これは、 docs からのレルムの関数です。