RxJava1到Rxjava2迁移错误
问题描述:
转换RxJava1代码RXJava2给予这个错误,不知道我做错了RxJava1到Rxjava2迁移错误
无类型变量(一个或多个)R的实例(S)存在,使得单>符合ObserableSource
API调用
@GET("/search/users?per_page=2")
Observable<UsersList> searchGithubUsers(@Query("q") String searchTerm);
@GET("https://stackoverflow.com/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
回报Single
在2.X;之后你必须申请toObservable()
。还要注意的是Observable.just(null)
禁止:空一般不允许与RxJava 2.
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);
})
)
);
}
答
尝试使用RxJava2CallAdapterFactory
:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://example.com/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
+0
但与concatMap操作 – Sam
toList()结合在Rxjava2未来这个编译错误toObservable()固定问题,但增加可观测。只是(0)给出另一个错误,“lambda表达式中的错误返回类型:Observable
将其更改为“just((Object)0)'或'。错误(o)' –
akarnokd
非常感谢您的解释,如果您可以通过一些引用链接来支持此行,那么对于登陆此问题的任何人都会很有帮助。“还要注意Observable.just(null)是被禁止的:null一般不会允许与RxJava 2“。 – Sam