我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
在使用RxJava开发的时候有时会遇到类似Cannot resolve method 'subscribe(anonymous io.reactivex.Observer)'的错误提示。
咋一看subscribe订阅代码并没有什么问题,但是编辑器一直提示错误。

解决方案
其实这是我们在create的时候使用了lambda表达式的缘故。
使用lambda并没有什么问题,问题在于使用lambda表达式的时候,subscribe订阅代码我们可能并没有写,这时使用lambda后代码就变成这样:
emitter -> {
try {
Thread.sleep(2000); // 假设此处是耗时操作
} catch (Exception e) {
e.printStackTrace();
emitter.onError(new RuntimeException());
}
emitter.onNext(true);
}
而在我们写完了subscribe代码后,再使用lambda转换,代码就变成:
(ObservableOnSubscribe<Boolean>) emitter -> {
try {
Thread.sleep(2000); // 假设此处是耗时操作
} catch (Exception e) {
e.printStackTrace();
emitter.onError(new RuntimeException());
}
emitter.onNext(true);
}
可以看到多了一个ObservableOnSubscribe,这是对T类型的确定。
所以一般我们使用RxJava时,如果要使用lambda表达式,需要在subscribe订阅内容完成后再进行统一转换。转换一般我们使用编辑器帮我们自动转换,windows中快捷键是alt + enter:


本文详细解析了在使用RxJava时遇到的'Cannotresolvemethod'subscribe(anonymousio.reactivex.Observer)'错误,并提供了有效的解决方案。通过对比lambda表达式前后subscribe代码的变化,明确了ObservableOnSubscribe类型的重要性。
1572





