有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RxJava:one request>list of Integer>sequence of requests for each int>result to list

我是RxJava的新手,在构造Observable时遇到了一些困难

我的任务是:

  1. 查询服务器GetExpPointSidarayByHouse
  2. 服务器响应。我们得到一个包含整数列表的对象(RpcDeviceInfoResponse)
  3. 对于每一个int值,都需要对服务器执行单独的查询。每个查询的结果都是一个对象“ExpPoint”
  4. 最终的结果是一个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) 个答案

  1. # 1 楼答案

    你已经有了一个Observable<Int>,所以你可以使用flatMap

    Observable.defer(
            //first query
        ).flatMap(
            // convert result to Observable<Int>
        )
        .flatMap(
            someInt -> doSomeQuery(someInt)
        )
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(...)