java - RxJava 运算符

标签 java android rx-java

我正在使用这篇文章学习 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 lambda 不谈,这里的大多数人都忽略了这样一个事实,即无论 RetroLambda 或您在某处找到的任何其他漂亮工具可以解决 Android 中缺少的 lambda 功能...

因此,仔细查看您的代码,您甚至在代码 fragment 中添加了一些注释,这些注释实际上是在解释您为什么会遇到一些编译错误:

1 你有一个空体的方法:

Observable<List<String>> query(String text);

所以,给它添加一个方法体,问题就解决了。你想让我做什么?你还不知道?然后添加一个虚拟的或空的 body ,稍后再解决:

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> .

关于java - RxJava 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527819/

相关文章:

java - 不是一个声明。为什么不?

java - Kafka 消费者手册提交偏移量

java - 在 Java 中使用带冒号的偏移量解析 ISO-8601 DateTime

android - 在 Android 模拟器上测试摇动事件

android - RxJava 类立即调度程序

java - 使用枚举来实现实用类和单例

java - 我应该如何从 API 获取存储库中的数据

android - 如何在单击按钮时实现带有一些图像的小弹出窗口

java - RXJava2 阻塞流,直到满足条件

java - RxJava 和 Retrofit 中的链接 api 调用