如何使用 RxJava 将数据从数据库加载到 RecyclerView? (MVP + RxJava + SQLite)
How to load data into RecyclerView from DB using RxJava? (MVP + RxJava + SQLite)
有显示项目的 RecyclerViewAdapter(该项目已经映射到数据库中)。
RecyclerViewAdapter 包含对 Presenter 的引用以加载项目。它还包含带有项目 ID 的 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。
- 每个项目都存储了相当多的信息,所以我想将所有完整的项目对象保存在 RecyclerView 中是个坏主意(也许我错了???这没关系)。
- 我知道如何使用 Rx 在后台线程中加载项目,但我对这个决定感到困惑。我可以在 RecyclerView 中创建订阅者并将其传递到展示层,在那里它将订阅到将从 DB 发出 Item 的可观察对象。这是可以接受的解决方案吗?
首先,我必须提到,只要你想从数据库加载数据,你就必须为 I/O 中速度不足导致的延迟 UI 做好准备。
我不知道你的数据有多大,但在最坏的情况下你可以一页一页地加载到内存中。然而,Android 设备并不是大数据管理的良好解决方案。
顺便说一句,在适配器内部创建可观察对象(即 View)不是一个好主意,它们必须在您的业务逻辑中创建(例如 API Service / DB or Presenter layer.
在此 repo 中,您可以找到 Android 由 MVP 开发的应用程序与 Ormlite 数据库混搭的良好示例使用 RxJava 和 Dagger:
希望对您有所帮助:)
有显示项目的 RecyclerViewAdapter(该项目已经映射到数据库中)。
RecyclerViewAdapter 包含对 Presenter 的引用以加载项目。它还包含带有项目 ID 的 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。
- 每个项目都存储了相当多的信息,所以我想将所有完整的项目对象保存在 RecyclerView 中是个坏主意(也许我错了???这没关系)。
- 我知道如何使用 Rx 在后台线程中加载项目,但我对这个决定感到困惑。我可以在 RecyclerView 中创建订阅者并将其传递到展示层,在那里它将订阅到将从 DB 发出 Item 的可观察对象。这是可以接受的解决方案吗?
首先,我必须提到,只要你想从数据库加载数据,你就必须为 I/O 中速度不足导致的延迟 UI 做好准备。
我不知道你的数据有多大,但在最坏的情况下你可以一页一页地加载到内存中。然而,Android 设备并不是大数据管理的良好解决方案。
顺便说一句,在适配器内部创建可观察对象(即 View)不是一个好主意,它们必须在您的业务逻辑中创建(例如 API Service / DB or Presenter layer.
在此 repo 中,您可以找到 Android 由 MVP 开发的应用程序与 Ormlite 数据库混搭的良好示例使用 RxJava 和 Dagger:
希望对您有所帮助:)