Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何删除具有特定id的所有项目?_Android_Realm - Fatal编程技术网

Android 如何删除具有特定id的所有项目?

Android 如何删除具有特定id的所有项目?,android,realm,Android,Realm,安卓工作室3.2 public class Profile extend RealmObject { @PrimaryKey private long id; } 我有列表profileList I此列表中有5个配置文件,其中id=1,2,… 很好 现在我需要从id=1,id=3,id=5的领域配置文件中删除 因此,删除后,列表必须仅包含2个id=2和id=4的配置文件 我怎么能做到 另外,ID列表是一个动态列表。今天它有3个ID,但明天可以有2个ID。根据领域文档,您需要搜索所有可能

安卓工作室3.2

public class Profile extend RealmObject {
  @PrimaryKey
  private long id;
}
我有
列表profileList
I此列表中有5个配置文件,其中
id=1,2,…

很好

现在我需要从
id=1,id=3,id=5的领域配置文件中删除

因此,删除后,列表必须仅包含2个id=2和id=4的配置文件

我怎么能做到


另外,ID列表是一个动态列表。今天它有3个ID,但明天可以有2个ID。

根据领域文档,您需要搜索所有可能的匹配项

// obtain the results of a query
final RealmResults<Profile> results = realm.where(Profile.class).equalTo("profile.id", 1).where().equalTo("profile.id", 3).where().equalTo("profile.id", 5).findAll();

// All changes to data must happen in a transaction
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        // remove single match
        results.deleteFirstFromRealm();
        results.deleteLastFromRealm();

        // remove a single object
        Dog dog = results.get(5);
        dog.deleteFromRealm();

        // Delete all matches
        results.deleteAllFromRealm();
    }
});
//获取查询结果
最终RealmResults results=realm.where(Profile.class).equalTo(“Profile.id”,1).where().equalTo(“Profile.id”,3).where().equalTo(“Profile.id”,5).findAll();
//对数据的所有更改都必须发生在事务中
realm.executeTransaction(新realm.Transaction(){
@凌驾
公共void执行(领域){
//删除单个匹配项
results.deleteFirstFromRealm();
results.deleteLastFromRealm();
//删除单个对象
狗=结果。获取(5);
dog.deleteFromRealm();
//删除所有匹配项
results.deleteAllFromRealm();
}
});

根据领域文档,您需要搜索所有可能的匹配项

// obtain the results of a query
final RealmResults<Profile> results = realm.where(Profile.class).equalTo("profile.id", 1).where().equalTo("profile.id", 3).where().equalTo("profile.id", 5).findAll();

// All changes to data must happen in a transaction
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        // remove single match
        results.deleteFirstFromRealm();
        results.deleteLastFromRealm();

        // remove a single object
        Dog dog = results.get(5);
        dog.deleteFromRealm();

        // Delete all matches
        results.deleteAllFromRealm();
    }
});
//获取查询结果
最终RealmResults results=realm.where(Profile.class).equalTo(“Profile.id”,1).where().equalTo(“Profile.id”,3).where().equalTo(“Profile.id”,5).findAll();
//对数据的所有更改都必须发生在事务中
realm.executeTransaction(新realm.Transaction(){
@凌驾
公共void执行(领域){
//删除单个匹配项
results.deleteFirstFromRealm();
results.deleteLastFromRealm();
//删除单个对象
狗=结果。获取(5);
dog.deleteFromRealm();
//删除所有匹配项
results.deleteAllFromRealm();
}
});

考虑到有直接的支持,这其实很简单

r.executeTransaction((realm) -> {
    realm.where(Profile.class).in("id", new Long[] { 1L, 3L, 5L }).findAll().deleteAllFromRealm();
});

请看

考虑到对它的直接支持,这实际上相当简单

r.executeTransaction((realm) -> {
    realm.where(Profile.class).in("id", new Long[] { 1L, 3L, 5L }).findAll().deleteAllFromRealm();
});

请参见

您是要从列表中删除配置文件,还是要完全从域中删除配置文件?我需要完全从域中删除。如何找出需要删除的ID?它是作为传入参数在方法中的收入:类似这样:myCustomDeleteMethod(List idToDelete){}那么您是要从列表中删除配置文件,或者完全从域中删除它们?我需要完全从域中删除。如何找出需要删除的ID?它是作为方法中的传入参数的收入:类似这样:myCustomDeleteMethod(List idToDelete){}但这是一种静态方式。但是假设ID列表是动态的。今天id=1,2,3,但明天可能是4,5。使用循环添加所有条件。RealmResults将只是一个空列表。这些条件应与
或()。链式查询基本上是
和()。但是假设ID列表是动态的。今天id=1,2,3,但明天可能是4,5。使用循环添加所有条件。RealmResults将只是一个空列表。这些条件应与
或()。链式查询基本上是
和()。