RxJava运算符

用户4242697

我正在使用本文学习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);
        }
    });

}

但是我有一个错误,我将其添加为注释我做错了什么?

阿隆索·多明格斯(Alonso Dominguez)

除了Java 8 lambda,这里的大多数人都忽略了一个事实,即无论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<List<String>>Observable<String>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章