【问题标题】:How to stream Realm Results to LiveData in Android Application如何在 Android 应用程序中将 Realm 结果流式传输到 LiveData
【发布时间】: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


    【解决方案1】:

    我认为这对你有用 (kotlin)(将返回 LiveData&lt;T!&gt;:

    fun <T> Flowable<T>.toLiveData() = LiveDataReactiveStreams.fromPublisher(this)
    

    【讨论】:

    • 我的发布者将是一个 List;如何创建由不断更新的 List“支持”的发布者?
    • 你的出版商不能是toFlowable()-ed 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2012-01-20
    • 2014-09-27
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多