0
我是RxJava的新手,构建Observable时遇到一些困难。RxJava:一个请求 - >整数列表 - >每个int的请求顺序 - >列表结果
我的任务是:
- 查询到服务器getExpPointsIdArrayByHouse
- 服务器响应。我们得到一个包含整数列表的对象(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");
}
});
我被困在点3.我有一个整数列表,每个我需要执行一个单独的查询。
在我而言,就我个人而言,这是更好flatMap后使用地图(返回的值是观察不到的)谢谢! – crd
如果'doSomeQuery'没有返回一个'Observable',那么可以使用'map'来代替。但是,由于您正在(假设)HTTP请求考虑转移到[Retrofit](http://square.github.io/retrofit/)并修改您的API,以便您的服务返回“Observable” – Pelocho