Android RxJava:我如何启动一个任务,以及当它完成后如何启动另一个任务?

Android RxJava:我如何启动一个任务,以及当它完成后如何启动另一个任务?,android,rx-java2,Android,Rx Java2,我正在尝试使用RxJava在Android中创建一个聊天应用程序。事件的顺序是这样的: 用户编写消息并按下“发送” 包含(id,message,sender,…)的message对象应该首先存储在本地数据库中,因为我需要生成他的id并返回已建立id的message对象 一旦消息对象被存储,id被设置,我必须使用正确的方式发送消息 问题是,我不确定如何使用RxJava编程,如何启动一个任务以及任务完成后如何启动另一个任务?我读过关于操作符zip、empty和when、skipuntil、fla

我正在尝试使用RxJava在Android中创建一个聊天应用程序。事件的顺序是这样的:

  • 用户编写消息并按下“发送”
  • 包含(id,message,sender,…)的message对象应该首先存储在本地数据库中,因为我需要生成他的id并返回已建立id的message对象
  • 一旦消息对象被存储,id被设置,我必须使用正确的方式发送消息
问题是,我不确定如何使用RxJava编程,如何启动一个任务以及任务完成后如何启动另一个任务?我读过关于操作符zip、empty和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);
        }
    });
}
公共可观察发送消息(消息消息){
返回Observable.unsafectreate(新Observable.OnSubscribe(){
@凌驾

public void call(订户您可以使用
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);
           });
 };
公共可观察发送消息(消息消息{
MessageEntity MessageEntity=messageToMessageEntityMapper.map(消息);
return messageRepository.saveMessage(messageEntity)
.map(更新消息->{
sendMessage(updatedMessage);
返回可观察的。刚好(真实);
});
};
您还可以使
sendMessage
返回一个布尔值
Observable
,而不是从
map
方法显式返回
true


如果不需要使用第一个可观察项发出的项目,您可以使用
可观察项。合并
,并使用
发送消息
返回可观察项。

您不能使用AsyncTask吗?我不知道RxJava。但这是我们在android研究中所做的。整个应用程序都是使用RxJava制作的,所以我尝试使用相同的技术和架构。where是可观测的。of(true)?该函数不存在。of是用于rxjs的。Observable.just是用于rxjava的。我猜它显示了这个错误:没有类型变量的实例T的存在使得可观测符合布尔推理变量R具有不兼容的边界:等式约束:布尔下界:可观测
public Observable<Boolean> sendMessage(Message message{ 
  MessageEntity messageEntity = messageToMessageEntityMapper.map(message); 
  return messageRepository.saveMessage(messageEntity)
          .map( updatedMessage -> {
               chatHelper.sendMessage(updatedMessage );
               return Observable.just(true);
           });
 };