web-dev-qa-db-ja.com

レルムAndroidすべてのデータを削除

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)をすべて書き込むことなく、レルムのすべてのデータを削除する方法はありますか? ?

9
user7866616

レルム(スキーマ)全体を削除する正しい方法は、次を使用することです。

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();
        }
    });
9
ralphgabb

realm.deleteAll()はすべての魔法を実行しますが、

何らかの理由で手動でbeginTransaction()トランザクションを実行する場合を除いて、commitTransaction()は絶対に使用しないでください。

トランザクション内で例外が発生した場合でもcommitTransactionになるため、executeTransaction()を使用するのが最善の方法です。

        try {
            realm.executeTransaction { realm ->
                realm.deleteAll()
            }
        } finally {
            realm?.close()
        }

Realmを効率的かつ簡単な方法で本当に使用したい場合は、 この記事 をお読みください。個人的には、公式ドキュメントよりも非常に便利だと思いました

1
Zohab Ali

最初にすべてのレルムインスタンスを閉じてから、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);
    }
0
shadeup

コメントで言及された例外について:

try (Realm realm = Realm.getInstance(realmConfig)) {
    realm.beginTransaction();
    //your operations here
    realm.commitTransaction();
} catch (Exception e) {
    realm.cancelTransaction();
}
0
Rahul Ahuja

このソリューションを試してください。これにより、レルムデータベースが削除されます。

public static boolean deleteRealm(RealmConfiguration configuration)

これは、 docs からのレルムの関数です。

0
Rahul Ahuja