我是RxJava的新手,在构建Observable时遇到了一些困难。
我的任务是:
我已经做过的事情:
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点陷入困境。我有一个整数列表,每个我需要执行一个单独的查询。
答案 0 :(得分:0)
您已有Observable<Int>
,因此可以使用flatMap
Observable.defer(
//first query
).flatMap(
// convert result to Observable<Int>
)
.flatMap(
someInt -> doSomeQuery(someInt)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...)