【问题标题】:RxJava - get list of result data of 2 combined requestsRxJava - 获取 2 个组合请求的结果数据列表
【发布时间】:2018-05-16 16:20:01
【问题描述】:

我有这两个服务:

private Observable<UMapsResponse> requestToServiceGetMaps(int idVenue, String accessToken) {
    return mService.getUMaps(idVenue, accessToken);
}

 private Observable<UMap> requestToServiceGetMapImageUrl(int idVenue, int idMap, String accessToken) {
    return mService.getUMap(idVenue, idMap, accessToken);
}

所以我像这样结合了我的两个服务:

    requestToServiceGetMaps(idVenue, accessToken)
            .flatMap(uMapsResponse -> Observable.just(uMapsResponse.getIndoorMaps()))
            .flatMapIterable(indoorMap -> indoorMap)
            .flatMap(
                    indoorMap -> requestToServiceGetMapImageUrl(idVenue, indoorMap.getId(), accessToken),
                    (indoorMap, uMap) -> Log.i(TAG, "MapsItem: " + new MapsItem(indoorMap, uMap))
            ).toList()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new SingleObserver<List<Integer>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onSuccess(List<Integer> integers) {

                }

                @Override
                public void onError(Throwable e) {

                }
            });

所以我有两个问题:

  1. 为什么我在 onSuccess 方法中有整数列表?
  2. 如何获取 MapsItem 列表(indoorMap、uMap)?

【问题讨论】:

  • #1 很简单,你会得到一个整数列表,因为你的流中的最后一个操作是toList()
  • 是的,我知道为什么 Integer 列表而不是 MapsItem 列表??

标签: java android retrofit2 rx-java2


【解决方案1】:

您会得到一个 Integer 列表,因为您从观察者链的最后一步发出 Integer,因为这是 Log.i() 返回的内容。

            ...
            .flatMap(
                    indoorMap -> requestToServiceGetMapImageUrl(idVenue, indoorMap.getId(), accessToken),
                    (indoorMap, uMap) -> new MapsItem(indoorMap, uMap)
            )
            .doOnNext( v -> Log.i(TAG, "MapsItem: " + v) )
            .toList()
            ...

请注意,最终 flatMap() 的结果是您要查找的新 MapsItem

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2017-06-06
    • 2016-02-21
    • 2020-08-19
    • 2017-11-16
    • 1970-01-01
    • 2023-01-02
    • 2021-08-07
    • 2021-06-06
    相关资源
    最近更新 更多