Как преобразовать 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 реализует интерфейс Iterable, поэтому вы можете выполнять итерации с помощью:

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);
                });
Другие вопросы по тегам