我正在尝试使用RxJava在Android中创建聊天应用程序。事件的顺序是这样的:
问题是我不确定如何使用RxJava编程,如何启动任务以及何时完成启动另一项任务?我已经读过关于运算符zip,空,以及when,skipuntil,flatmap的内容,但我不确定我需要哪些。我对RxJava很新。
我有这个方法:
public Observable<Boolean> sendMessage(Message message) {
return Observable.unsafeCreate(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
MessageEntity messageEntity = messageToMessageEntityMapper.map(message);
messageRepository.saveMessage(messageEntity);
chatHelper.sendMessage(messageEntity);
subscriber.onNext(true);
}
});
}
saveMessage和sendMessage的实现:
public Observable<MessageEntity> saveMessage(MessageEntity messageEntity) {
return messageCache.saveMessage(messageEntity);
}
public void sendMessage(MessageEntity messageEntity) {
chatConnection.sendMessage(message);
}
我希望sendMessage在saveMessage完成后执行并返回预期的对象。
答案 0 :(得分:1)
您可以使用observable.map
来消耗第一个observable的结果并执行第二个observable。
public Observable<Boolean> sendMessage(Message message{
MessageEntity messageEntity = messageToMessageEntityMapper.map(message);
return messageRepository.saveMessage(messageEntity)
.map( updatedMessage -> {
chatHelper.sendMessage(updatedMessage );
return Observable.just(true);
});
};
您还可以让sendMessage
返回布尔值Observable
,而不是从true
方法明确返回map
。
如果不需要使用第一个observable中发出的项目,则可以使用Observable.merge
代替sendMessage
返回一个observable。