将RxJava1代码转换为RXJava2给此错误,不确定我在做什么错

不存在类型变量R的实例,因此Single>符合ObserableSource

API调用

@GET("/search/users?per_page=2")
Observable<UsersList> searchGithubUsers(@Query("q") String searchTerm);

@GET("/users/{username}")
Observable<User> getUser(@Path("username") String username);


RxJAva1:

 public Observable<List<User>> searchUsers(final String searchTerm) {
        return Observable.defer(() -> githubUserRestService.searchGithubUsers(searchTerm).concatMap(
                usersList -> Observable.from(usersList.getItems())
                        .concatMap(user -> githubUserRestService.getUser(user.getLogin())).toList()))
                .retryWhen(observable -> observable.flatMap(o -> {
                    if (o instanceof IOException) {
                        return Observable.just(null);
                    }
                    return Observable.error(o);
                }));
    }


RXJava2

   public Observable<List<User>> searchUsers(final String searchTerm) {
        return Observable.defer(() -> githubUserRestService.searchGithubUsers(searchTerm).concatMap(
                usersList -> Observable.fromIterable(usersList.getItems())
                        .concatMap(user -> githubUserRestService.getUser(user.getLogin())).toList()))
                .retryWhen(observable -> observable.flatMap(o -> {
                    if (o instanceof IOException) {
                        return Observable.just(null);
                    }
                    return Observable.error(o);
                }));
    }

最佳答案

toList在2.x中返回Single;您必须在其后应用toObservable()。另请注意,禁止使用Observable.just(null):RxJava 2通常不允许使用null。

Observable<List<User>> searchUsers(final String searchTerm) {
    return Observable.defer(() ->
         githubUserRestService
            .searchGithubUsers(searchTerm)
            .concatMap(usersList ->
                 Observable.fromIterable(usersList.getItems())
                   .concatMap(user ->
                       githubUserRestService
                       .getUser(user.getLogin()))
                       .toList()
                       .toObservable()
                   )
            )
            .retryWhen(observable ->
                observable.flatMap(o -> {
                    if (o instanceof IOException) {
                        return Observable.just(0);
                    }
                    return Observable.error(o);
                })
            )
       );
}

关于android - 从RxJava1到Rxjava2的迁移错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46404119/

10-10 17:14