Как преобразовать RealmResults<Model> в ArrayList<Model>?
Когда я использую realm.where(Model.class), он возвращает RealmResults, и поля элемента списка пусты. Как преобразовать набор запросов в читаемый ArrayList или перебрать RealmResults, чтобы получить реальные данные из объектов в БД?
4 ответа
Решение
Все извлечения ленивы в Realm, и данные никогда не копируются. Поэтому, если вы хотите получить текущие данные из RealmResults, вы должны вызвать realm.copyFromRealm(results).
public List<Model> getModelList() {
List<Model> list = new ArrayList<>();
Realm realm;
try {
realm = Realm.getDefaultInstance();
RealmResults<Model> results = realm
.where(Model.class)
.findAll();
list.addAll(realm.copyFromRealm(results));
} finally {
if (realm != null) {
realm.close();
}
}
return list;
}
RealmResults
for (E e : realmResults) {
// Do stuff
}
Если это не отвечает на вопрос, то, пожалуйста, уточните его и добавьте образец кода.
Версия Kotlin, используемая в моем приложении:
/**
* convert RealmResults<Model> to ArrayList<Model>
* REFER to [stackoverflow](https://stackoverflow.com/questions/37250987/how-to-convert-realmresultsmodel-to-arraylistmodel)
* answer of [DH28](https://stackoverflow.com/users/5152885/dh28)
*
* @param realm realm
* @param results RealmResults<Model> to convert
* @return resultsList List<Model> converted
*/
fun getResultsList(
realm: Realm,
results: RealmResults<Model>?
): MutableList<Model> {
val resultsList: MutableList<Model> = ArrayList()
resultsList.addAll(realm.copyFromRealm(results!!))
return resultsList
}
см. также метод www.mongodb.com
copyFromRealm(Iterable<E> realmObjects)
Realm realm = Realm.getDefaultInstance();
realm.where(Object.class)
.findAllAsync()
.addChangeListener(list -> {
List<Object> listObjects = realm.copyFromRealm(list);
});