Android 如何删除具有特定id的所有项目?
安卓工作室3.2Android 如何删除具有特定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。根据领域文档,您需要搜索所有可能
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将只是一个空列表。这些条件应与或()。链式查询基本上是和()。