如何截断领域 android 中的所有表

How to truncate all tables in realm android

您好,我正在尝试在用户注销时截断 android 中的所有表。我仅使用领域默认路径。

realm = Realm.getInstance(getApplicationContext());

public void clearDB() {
    Realm.deleteRealmFile(instance);
}

更新

使用 realm.delete(Foo.class) 代替,因为 clear() 已弃用。从 0.91.0 所有 @Deprecated 方法都将被删除。


这里是 Realm 的基督徒。 只要您关闭了所有打开的 Realm 实例,该方法就会起作用。 另一种方法是像这样清除您想要的表:

realm = Realm.getInstance(getApplicationContext());

public void clearDB() {
  realm.executeTransaction(new Realm.Transaction() {
     @Override
     public void execute(Realm realm) {
        realm.clear(Foo.class);
        realm.clear(Bar.class);
     }
  });
}

您可以在这里阅读更多内容:http://realm.io/docs/java/0.77.0/api/io/realm/Realm.html#clear(java.lang.Class)

使用realm.delete(Myclass.class);

realm = Realm.getDefaultInstance();

    realm.beginTransaction();
    realm.delete(SuggestedAppDto.class);
    realm.delete(WifiSpotsDto.class);
    realm.commitTransaction();
    realm.close();

这对我有用。

如果您想清除所有表而不担心忘记清除您将来可能创建的新表,只需执行此操作

// mRealm is your realm instance

mRealm.beginTransaction();
Set<Class<? extends RealmModel>> tables = mRealm.getConfiguration().getRealmObjectClasses();
for (Class<? extends RealmModel> table : tables) {
    mRealm.delete(table);
}
mRealm.commitTransaction();

如果要清除所有表,可以考虑使用realm.deleteAll()方法:

Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.deleteAll();
realm.commitTransaction();
realm.close();

删除所有 tables:

Realm.init(fragmentActivity);
    RealmConfiguration realmConfig = new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build();
    Realm realm = Realm.getInstance(realmConfig);
    realm.beginTransaction();
    try {
        realm.deleteAll();
        realm.commitTransaction();
    } catch (Exception e) {
        e.printStackTrace();
        realm.cancelTransaction();
    } finally {
        realm.close();
    }

删除一个或多个table:

  public void clearSearchHistory() {

    Realm.init(fragmentActivity);
    RealmConfiguration realmConfig = new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build();
    Realm realm = Realm.getInstance(realmConfig);

    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.delete(Foo.class);
        }
    });


}