java RxJava:one request>list of Integer>sequence of requests for each int>result to list
我是RxJava的新手,在构造Observable时遇到了一些困难
我的任务是:
- 查询服务器GetExpPointSidarayByHouse
- 服务器响应。我们得到一个包含整数列表的对象(RpcDeviceInfoResponse)
- 对于每一个int值,都需要对服务器执行单独的查询。每个查询的结果都是一个对象“ExpPoint”
- 最终的结果是一个expPoints列表
我已经做了:
Observable
.defer(new Func0() {
@Override
public Object call() {
try {
return Observable.just(apiHttpClient.getExpPointsIdArrayByHouse(houseId));
} catch (IOException e) {
e.printStackTrace();
return Observable.error(e);
} catch (RightsException e) {
e.printStackTrace();
return Observable.error(e);
}
}
})
.flatMap(new Func1<RpcDeviceInfoResponse, Observable<Integer>>() {
@Override
public Observable<Integer> call(RpcDeviceInfoResponse rpcResponse) {
if (rpcResponse.getResult().size() == 0) {
errorReport(false, context.getResources().getString(R.string.error_while_getting_exp_points), "");
return null;
}
RpcDeviceInfoResponse.TaskListResult result = rpcResponse.getResult().get(0);
return Observable.from(result.getResult());
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
Log.v("onCompleted", "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.v("onError", "onError");
}
@Override
public void onNext(Integer integer) {
Log.v("onNext", "onNext");
}
});
我在第三点被卡住了。我有一个整数列表,对于每个整数,我需要执行一个单独的查询
# 1 楼答案
你已经有了一个
Observable<Int>
,所以你可以使用flatMap