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

Pra*_*noi 43 database android 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();
Run Code Online (Sandbox Code Playgroud)

Chr*_*ior 111

在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();
    }
});
Run Code Online (Sandbox Code Playgroud)

从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();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 如果在已弃用的`.clear()`方法中有一条注释,那么`.deleteAllFromRealm()`现在是正确使用的方法,那就好了. (4认同)
  • @EddieLee,它位于[0.89.0更改日志]中(https://github.com/realm/realm-java/blob/master/CHANGELOG.md#0890) (2认同)

Rog*_*elk 8

这必须在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();
Run Code Online (Sandbox Code Playgroud)