我在使用改造的 RxJava 支持链接可观察对象时遇到问题。我可能误解了如何使用它,否则它可能是改造中的错误。希望这里有人可以帮助我了解发生了什么。编辑:我将 MockRestAdapter 用于这些响应 - 这可能是相关的,因为我看到 RxSupport 实现略有不同。
这是一个假的银行应用程序。它正在尝试进行转账,并且在转账完成后,它应该进行账户请求以更新账户值。这基本上只是我尝试flatMap的一个借口。不幸的是,以下代码不起作用,没有订阅者收到通知:
案例 1:链接两个改造产生的 observables
传输服务(注意:返回一个改造产生的 observable):
@FormUrlEncoded @POST("/user/transactions/")
public Observable<TransferResponse> transfer(@Field("session_id") String sessionId,
@Field("from_account_number") String fromAccountNumber,
@Field("to_account_number") String toAccountNumber,
@Field("amount") String amount);
帐户服务(注意:返回一个改造产生的可观察对象):
@FormUrlEncoded @POST("/user/accounts")
public Observable<List<Account>> getAccounts(@Field("session_id") String sessionId);
将两个改造产生的 observables 链接在一起:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override public Observable<? extends List<Account>> call(TransferResponse transferResponse) {
return accountsService.getAccounts(session.getSessionId());
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
案例 2:创建我自己的 observable 并与改造生产的一个链接
如果我忽略 Retrofit 中对“平面映射”调用的内置 Rx 支持,它会完美运行!所有订阅者都会收到通知。见下文:
新的帐户服务(注意:不产生可观察的):
@FormUrlEncoded @POST("/user/accounts")
public List<Account> getAccountsBlocking(@Field("session_id") String sessionId);
创建我自己的 observable 并自己发出项目:
transfersService.transfer(session.getSessionId(), fromAccountNumber, toAccountNumber, amount)
.flatMap(new Func1<TransferResponse, Observable<? extends List<Account>>>() {
@Override public Observable<? extends List<Account>> call(TransferResponse transferResponse) {
return Observable.create(new Observable.OnSubscribe<List<Account>>() {
@Override public void call(Subscriber<? super List<Account>> subscriber) {
List<Account> accounts = accountsService.getAccountsBlocking(session.getSessionId());
subscriber.onNext(accounts);
subscriber.onCompleted();
}
});
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
任何帮助将不胜感激!