Как загрузить данные в RecyclerView из базы данных с помощью RxJava? (MVP RxJava SQLite)

#android #sqlite #android-recyclerview #rx-java #mvp

#Android #sqlite #android-recyclerview #rx-java #mvp

Вопрос:

Существует RecyclerViewAdapter, который показывает элементы (эти элементы уже сопоставлены в базе данных).

RecyclerViewAdapter содержит ссылку на Presenter для загрузки элементов. Также он содержит ArrayList с идентификатором элементов.

Как загрузить элемент с помощью Rx? Как должен выглядеть правильный код для метода onBindViewHolder?

Теперь это выглядит так:

 List<Long> ItemIds; 
Presenter presenter;
public void onBindViewHolder(ViewHolder holder, int position) {
   Long itemId = ItemIds.get(position);
   Item item = presenter.getItemById(itemId); //loading from DB
   holder.setContent(item);
}
  

P.S.

  • Каждый элемент хранит довольно размытую информацию, поэтому я думаю, что это плохая идея хранить все полные объекты item в RecyclerView (может быть, я ошибаюсь??? и это нормально).
  • Я знаю, как загружать элементы в фоновый поток с помощью Rx, но меня смущает это решение. Я могу создать подписчика в RecyclerView и передать его на уровень presenter, где он будет подписан на observable, который будет выдавать элемент из базы данных. Является ли это приемлемым решением?

Ответ №1:

Прежде всего, я должен упомянуть, что до тех пор, пока вы хотите загружать данные из базы данных, вы должны быть готовы к зависанию пользовательского интерфейса из-за низкой скорости ввода-вывода.

Я не имею ни малейшего представления о том, насколько велики ваши данные, но в худшем случае вы можете загружать их в память постранично. Однако устройства Android не являются хорошим решением для управления большими данными.

Кстати, создавать observable внутри адаптера (т. Е. View) не очень хорошая идея, и они должны быть созданы в вашей бизнес-логике (например, на уровне API Service / DB или Presenter).

В этом репозитории вы можете найти хороший образец приложения для Android, разработанного MVP с использованием mash-up базы данных Ormlite с использованием RxJava и Dagger:

https://github.com/mmirhoseini/marvel

Надеюсь, это поможет 🙂

Комментарии:

1. Большое спасибо за отличный пример 😉