为什么这个简单的 RxJava 示例不能 运行?

Why this simple RxJava example cannot run?

我正在按照这篇文章学习 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();
    }
}

让它显示敬酒。

一开始,AndroidStudio生成的代码在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

我做错了什么?

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

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