Android Studio 3.2
public class Profile extend RealmObject {
@PrimaryKey
private long id;
}
У меня есть List<Profile> profileList;
В этом списке 5 профилей с id = 1, 2, ...
Хороший.
Теперь мне нужно удалить из профилей Realm с id=1 ,id=3, id=5
Таким образом, после удаления список должен содержать только 2 профиля с id=2 and id=4.
Как я могу это сделать?
P.S. Список идентификаторов - это динамический список. Сегодня у него 3 идентификатора, а завтра - 2 идентификатора.
Мне нужно полностью удалить из Realm.
как узнать, какие идентификаторы нужно удалить?
Это доход как входящие параметры в методе: примерно так: myCustomDeleteMethod (List <Integer> idToDelete) {}
Согласно документации Realm, вам нужно искать все возможные совпадения
// 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();
}
});
Но это статичный способ. Но предположим, что список идентификаторов динамический. Сегодня id = 1,2,3, а завтра может быть 4,5.
Используйте цикл, чтобы добавить все критерии.
Этот RealmResults будет просто пустым списком. Условия следует сочетать с or(). Связанные запросы - это в основном and().
Что ж, на самом деле это довольно просто, учитывая, что это прямая поддержка ...
r.executeTransaction((realm) -> {
realm.where(Profile.class).in("id", new Long[] { 1L, 3L, 5L }).findAll().deleteAllFromRealm();
});
См. https://realm.io/docs/java/latest/api/io/realm/RealmQuery.html#in-java.lang.String-java.lang.Long:A-
Так вы пытаетесь удалить профили из списка или полностью удалить их из Realm?