【问题标题】:Why this simple RxJava example cannot run?为什么这个简单的 RxJava 示例无法运行?
【发布时间】:2015-09-14 15:51:41
【问题描述】:

我正在学习 RxJava 这篇文章:http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

第一个例子使用 RxJava 打印一个字符串。我对它做了一点改动。请参阅以下代码。

Observable myObservable = Observable.create(
        new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber<? super String> o) {
                o.onNext("hello world");
                o.onCompleted();
            }
        }
);

Subscriber mySubscriber = new Subscriber() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(String s) {
        Toast.makeText(mActivity,s,Toast.LENGTH_SHORT).show();
    }
}

只是让它显示敬酒。

首先Android Studio生成的代码是Observable中的call(Object o),Subscriber中的onNext(Object o)

然后我按照文章改了,把“Object o”改成“Subscriber o”

但 Android Studio 在订阅者 o 处通知我“Class 'Anonymous class derived from OnSubscribe' must be either declared abstract or implement abstract method 'call(T)' in Action1”。以及 onNext() 处的“method does not override method from it's superclass

我做错了什么?

【问题讨论】:

  • 你注册 mySubsriber 到你的 observable 了吗?

标签: java android rx-java rx-android


【解决方案1】:

从您得到的错误来看,Subscriber&lt;? super String&gt; o 似乎不是 call 方法所期望的前一个参数。使用&lt;String&gt; 作为类型应该可以修复它

Observable<String> myObservable = Observable.create(
        new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> o) {
                o.onNext("hello world");
                o.onCompleted();
            }
        }
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2021-04-09
    • 2017-11-25
    • 2013-03-16
    • 2011-07-08
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多