2016-03-05 4 views
9

У меня есть объектRealm Android - Как преобразовать RealmResults в массив объектов?

public class ArticleList extends RealmObject { 

@PrimaryKey 
private String id; 
private String title; 
private String subtitle; 
private String image; 
private String category; 

} 

То, что я хочу сделать, это принести результат от Realm и их конвертировать результат в ArticleList[]

Fetch я с помощью

RealmResults<ArticleList> results = realm.where(ArticleList.class).equalTo("category", "CategoryName").findAll(); 

Что я имею сделать рядом, чтобы получить массив объектов?

+3

Почему бы не использовать 'RealmResults' напрямую? зачем вам нужна другая структура данных для хранения данных? – pskink

+0

Вы должны использовать 'RealmBaseAdapter' для listviews. – EpicPandaForce

ответ

9

RealmResults имеет метод toArray() - также toArray(T[] contents) (обратите внимание на цепочку наследования RealmResults). Вы можете использовать их следующим образом:

ArticleList[] resultArray = (ArticleList[]) results.toArray(); 

Или

ArticleList[] resultArray = results.toArray(new ArticleList[results.size()]); 

В идеале, вы хотели бы использовать вместо RealmResults. Это позволяет получить ваши данные "free" updates, а также все удобства List.

+0

компилятор жалуется на несовместимые типы :(https://s.mail.ru/oRPdhBqpwCrp/img-2016-03-05-15-14-37.png –

+0

@AlexeyK Adam S является правильным: вместо этого используйте 'RealmResults', если вам нужно это для адаптера «ListView», узнайте (или напишите) адаптер, который принимает «RealmResults», как «android.widget.CursorAdapter», который принимает «Cursor» – pskink

+0

. Я обновил, показывая, как использовать 'toArray() 'Еще раз - * это, вероятно, плохая идея *. –

21

Простейшее преобразовать в Java ArrayList:

ArrayList<People> list = new ArrayList(mRealm.where(People.class).findAll()); 
+0

Что делать, если элемент в People удаляется в фоновом потоке? – EpicPandaForce

+0

Тогда разработчик должен одновременно удалить этот объект в транзакции realm. – Farhan

+0

Yep , или перестроить массив в прослушивании изменений в реальном времени – EpicPandaForce

2

Вместо того, чтобы пытаться преобразовать в массив, вы должны расширить абстрактный класс RealmBaseAdapter из https://github.com/realm/realm-android-adapters сохранить свои результаты в синхронизации.

Realm предоставляет эти классы в качестве примера того, как создать список автоматического обновления с помощью RecyclerView или ListView.

+1

@CarlSmith нет, это не так, они просто удалили устаревший конструктор, «RealmBaseAdapter» по-прежнему прямо там https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmBaseAdapter.java – EpicPandaForce

+0

Так что извините за мою ошибку, @EpicPandaForce. Я удалил комментарий. –

10
List<ArticleList> unmanagedList = realm.copyFromRealm(results); 

Будет ли это делать.

Смежные вопросы