【发布时间】:2018-08-02 08:57:32
【问题描述】:
我正在调查我当前的 Android 应用程序中 LiveData 的使用情况。
我的应用程序的主屏幕显示了从我的本地 Realm 数据库中检索到的数据项列表。
目前我正在从 Realm 中检索所有行,然后将整个列表发布到我的 LiveData。目前这需要 5 秒或更长时间
final List<DataItemDO> dataItemDOs = DatabaseController.fetchShortlistedDataItems();
final List<DataItemUI> dataItemUIs = new ArrayList<>();
for (final DataItemDO dataItemDO : dataItemDOs) {
final DataItemUI dataItem = constructDataItemUI(dataItemDO);
dataItemUIs.add(dataItem);
}
DATA_ITEMS.postValue(dataItemUIs);
我想做的是将每一行发布到我的 LiveData,以便我的用户体验更具响应性,或者说每检索 10 行发布一次。
final List<DataItemDO> dataItemDOs = DatabaseController.fetchShortlistedDataItems();
final List<DataItemUI> dataItemUIs = new ArrayList<>();
for (final DataItemDO dataItemDO : dataItemDOs) {
final DataItemUI dataItem = constructDataItemUI(dataItemDO);
dataItemUIs.add(dataItem);
DATA_ITEMS.postValue(dataItemUIs);
}
当我尝试这种方法时,我得到了以下异常:-
08-02 09:02:52.503 22134-22134/sutd.android E/AndroidRuntime: FATAL EXCEPTION: main
Process: sutd.android, PID: 22134
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at java.util.AbstractCollection.toString(AbstractCollection.java:461)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:132)
我觉得要么 LiveData 转换可以解决这个问题,要么使用 LiveDataReactiveStreams。
我相信我需要构建一个 Emitter> 并发射每一行,我不知道如何开始。
如何在每次从 Realm 获取新行时刷新显示的列表?
【问题讨论】:
标签: android rx-java2 android-livedata