如何从Realm Database Android中删除对象?

时间:2016-04-20 07:02:16

标签: android database realm

我想从域中删除所有等于userid的消息对象

RealmQuery<Message> rowQuery = realm.where(Message.class).equalTo(Message.USER_ID, userId);
realm.beginTransaction();
//TODO : here I want to remove all messages where userId is equal to "9789273498708475"
realm.commitTransaction();

5 个答案:

答案 0 :(得分:103)

在0.88.3及以下,你可以这样做:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Message> rows = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll();
        rows.clear();
    }
});

从0.89(下一个版本)开始,这将是deleteAllFromRealm()

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Message> result = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll();
        result.deleteAllFromRealm();
    }
});

答案 1 :(得分:4)

这必须在realm.beginTransaction()之间完成;和realm.commitTransaction();我还在代码示例中列出了一些args()。

    realm.beginTransaction();
    MessageObject messageobj = realm.where(Message.class)
                             .findFirst()  //or
                             .greaterThan("age", 10) // implicit AND
                             .beginGroup() //or you can use
                             .equalTo("name", "Peter")
                             .or()
                             .contains("name", "Jo")
                             .endGroup()
                             .findAll();
    messageobj.deleteFromRealm();
    realm.commitTransaction();

答案 2 :(得分:2)

这就是我用它的方式

  RealmResults<CartDBItems> rows= realm.where(CartDBItems.class).equalTo("id", id).findAll();;
         rows.deleteAllFromRealm();

答案 3 :(得分:0)

 myRealm.beginTransaction();

     RealmResults<Datos> datos = myRealm.where(DatosCliente.class)
                        .equalTo("folio",FOLIO)
                        .findAll();

 datos.deleteAllFromRealm();

答案 4 :(得分:0)

适用于 v10 以下领域的安卓用户。下面给出将工作正常

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Note> result = realm.where(Notes.class).equalTo(Note.NOTE_ID,noteID).findAll();
        result.deleteAllFromRealm();
    }
});

但是,它会在 v10 及以上版本崩溃

Running transactions on the UI thread has been disabled.

只要您在 v10 之前运行 Realm,如果您从 UI 线程运行执行事务,您的应用就不会崩溃。对于即将发布的 v10 版本,我们将在 RealmConfiguration.Builder 中引入两个新设置,即 allowWritesOnUiThreadallowQueriesOnUiThread,这将允许用户控制是否允许从界面线程。

RealmConfiguration config = new RealmConfiguration.Builder()
  .allowWritesOnUiThread(true)
  .build()

它会像往常一样工作。因此,您可以决定何时/是否要选择加入新行为。