我的网络客户端设计存在问题。我有一个用例,当客户端尝试从REST API请求项目时,但是如果API返回404 HTTP状态代码,我需要发送请求以在服务器上创建项目,然后再次请求该项目。
我想使用RxJava来避免回调地狱。这是一个有效的用例RxJava吗?是否可以创建这样的条件子请求?
感谢您的时间和答案。
答案 0 :(得分:2)
根据您的问题,我认为您的内容看起来像是
public Observable<Item> getItem();
将返回该项,或触发错误和
public Observable<?> createItem();
这将创建一个。
你可以像这样使用这两个:
public Observable<Item> getOrCreateItem() {
return getItem().onErrorResumeNext(error -> {
// Depending on your framework, figure out which is the result code
if (error.getResultCode() == 404) {
return createItem().flatMap(ignored -> getItem());
} else {
return Observable.error(error);
}
});
}
使用Retrofit,您必须简单地确保异常是RetrofitError
,强制转换,并获取响应和状态代码。 (((RetrofitError) error).getResponse().getStatus()
)