Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合一些可能永远不会发出的RxJava 2观测值_Java_Android_Rx Java2 - Fatal编程技术网

结合一些可能永远不会发出的RxJava 2观测值

结合一些可能永远不会发出的RxJava 2观测值,java,android,rx-java2,Java,Android,Rx Java2,我正在开发一个聊天客户端,它需要合并来自两个不同接收源的数据: 获取可用聊天及其消息的初始列表的REST网关:Observable getConversations() websocket网关,在新消息到达时发出新消息:Observable getMessages() 这两个可观察项应组合在一个可观察项中,其中ConversationsModel包含对话列表,并包含向给定对话添加消息的逻辑 组合的可观察对象应在每次任一可观察对象发出时发出更新的ConversationsModel:订阅时,其

我正在开发一个聊天客户端,它需要合并来自两个不同接收源的数据:

  • 获取可用聊天及其消息的初始列表的REST网关:
    Observable getConversations()
  • websocket网关,在新消息到达时发出新消息:
    Observable getMessages()
这两个可观察项应组合在一个
可观察项中,其中ConversationsModel包含对话列表,并包含向给定对话添加消息的逻辑

组合的可观察对象应在每次任一可观察对象发出时发出更新的ConversationsModel:订阅时,其余可观察对象发出一次,并建立websocket连接。然后,通过套接字网关发送的任何新消息都应该添加到模型中,然后重新发送

下面是我目前的解决方案,它可以工作,但我不满意,因为ConversationsModel需要在流之外创建:

ConversationsModel conversations = new ConversationsModel();
conversationsObservable = restGateway.getConversations().map(list -> conversations.setConversations(list))
    .mergeWith(socketGateway.getMessages().map(message -> conversations.addMessage(message)))
    .doOnSubscribe(disposable -> socketGateway.connect())
    .doOnDispose(() -> socketGateway.disconnect())
    .replay(1)
    .refCount();
我要找的是这样的东西:

conversationsObservable = restGateway.getConversations().map(list -> new ConversationsModel(list))
    .withLatestFrom(socketGateway.getMessages(), (conversationsModel, message) -> conversationsModel.addMessage(message))
    .doOnSubscribe(disposable -> socketGateway.connect())
    .doOnDispose(() -> socketGateway.disconnect())
    .replay(1)
    .refCount();

问题是
withLatestFrom
(以及我迄今为止尝试过的所有其他操作符)在所有可见光至少发射一次之前不会发射任何东西。实际上,这意味着在第一条消息通过套接字连接到达之前,我的UI将被阻止,这当然是不可接受的。

您是否尝试了
combinelatetest
,并通过
startWith()
在源代码上设置了一些默认值?我考虑过这一点,但这似乎是一个黑客行为。我正在寻找一个“正确”的解决方案。您是否尝试了
CombineTest
,并通过
startWith()
在源代码上设置了一些默认值?我考虑过这一点,但这似乎是一个错误。我在寻找解决这个问题的“正确”方法。