[英]RxJava operators
我正在使用这篇文章学习rxjava: http ://blog.danlew.net/2014/09/22/grokking-rxjava-part-2/并且无法重现我接下来做的这篇文章的第一个例子:
Observable<List<String>> query(String text); //Gradle: error: missing method body, or declare abstract
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
query.subscribe(urls -> { //Gradle: error: cannot find symbol variable query
for (String url : urls) {
System.out.println(url);
}
});
}
但我有一个错误,我添加了评论我做错了什么?
除了Java 8 lambdas之外,这里的大多数人都错过了这样一个事实:无论是RetroLambda还是其他任何漂亮的工具,你都可以找到代码来解决Android中错过的lambda特性 ...
所以,仔细看看你的代码,你甚至在代码片段中添加了一些注释,它们实际上解释了为什么你有一些编译错误:
1你有一个空体的方法 :
Observable<List<String>> query(String text);
因此,为它添加一个方法体并解决问题。 你想让我做什么? 你还不知道吗? 然后添加一个虚拟或空体并稍后解决:
Observable<List<String>> query(String text) {
return Observable.just(Arrays.asList("url1", "url2"));
}
2代码中根本没有query
变量 。 你得到的是一个query
方法,使用方法的语法要求你使用大括号:
query("whatever").subscribe(urls -> {
for (String url : urls) {
System.out.println(url);
}
});
现在添加RetroLambda或使用匿名类,您就完成了。 请记住,没有任何内容可以为您的代码添加更多功能,但只会解决那些编译错误。 现在问问自己,在查询方法中你想做什么并继续。
注意 :Observable对象是一个数据流,这基本上意味着你可能得到零元素,一个元素或许多元素; 所有这些指定类型的实例。 所以你的代码似乎期望一串字符串列表,如果你真正想要的是一个字符串流,那么用Observable<String>
替换Observable<List<String>>
。
通过Gradle: error:
你的意思是编译错误? 您应该在query
和.subscribe(urls -> {
之间放置括号,因为这不是变量或类提交而是方法,所以您应该调用它来获取Observable
订阅。
那么,你还需要实现查询方法来返回Observable
,例如:
private Observable<String> query() {
return Observable.just("one", "two", "three");
}
由于Java 8,您将获得另一个构建错误,但正如评论中已经提到的,您可以轻松地使用retrolamda with gradle来解决问题。 否则,您可以使用Android Studio快速修复程序将java 8 lambdas转换为java 6匿名类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.