Rx java RxJava-单可观察立即执行-为什么?

Rx java RxJava-单可观察立即执行-为什么?,rx-java,rx-android,subject-observer,Rx Java,Rx Android,Subject Observer,我有一个非常简单的RXJava发射器。它实际上是一个publishSubject,但它的工作是将整数转换为字符串,并在订阅时更新UI元素。代码如下所示: PublishSubject integerToStringEmitter = PublishSubject.create(); Subscription mysingle= Single.just(4).map(new Func1<Integer, String>() { @Override

我有一个非常简单的RXJava发射器。它实际上是一个publishSubject,但它的工作是将整数转换为字符串,并在订阅时更新UI元素。代码如下所示:

PublishSubject integerToStringEmitter = PublishSubject.create();

    Subscription mysingle= Single.just(4).map(new Func1<Integer, String>() {


        @Override
        public String call(Integer integer) {
            return String.valueOf(integer);
        }
    }).subscribe(new Observer<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(String s) {
            tv.setText(s);
        }
    });
// integerToStringEmitter.subscribe(); //it still emits even without this, why ?
PublishSubject integerToStringEmitter=PublishSubject.create();
Subscription mysingle=Single.just(4.map)(new Func1(){
@凌驾
公共字符串调用(整数){
返回字符串.valueOf(整数);
}
}).订阅(新观察员){
@凌驾
未完成的公共无效(){
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
public void onNext(字符串s){
tv.setText(s);
}
});
//integerToStringEmitter.subscribe()//即使没有这个,它仍然会发射,为什么?
我希望发生的事情:订阅只在我调用integerToStringEmitter.subscribe()时开始


当前发生的情况:我启动程序后,onNext就会被调用,UI元素被设置为#4。为什么?我需要对这个东西有更多的控制,这样即使我没有订阅它,它也不会立即执行。请帮忙解决

我不确定你想达到什么目的。您的代码看起来不正确,甚至不应该编译。如果它将编译,那么subscribe(newobserver(){…部分显然将触发事件流

下面是一个简单的示例,可以看到一个可观测的整数发出,并将其映射到字符串和一个订阅它的观察者:

Observable<String> myObservable = Observable.just(1, 2, 3, 4).map(new Func1<Integer, String>() {
    @Override
    public String call(Integer integer) {
        return String.valueOf(integer);
    }
});

Subscriber<String> mySubscriber = new Subscriber<String>() {
    @Override
    public void onCompleted() {
        System.out.println("onCompleted");
    }

    @Override
    public void onError(Throwable e) {
        System.out.println("onError: " + e.getMessage());
    }

    @Override
    public void onNext(String s) {
        System.out.println("onNext: " +s);
    }
};

myObservable.subscribe(mySubscriber);
Observable myObservable=Observable.just(1,2,3,4).map(新函数1(){
@凌驾
公共字符串调用(整数){
返回字符串.valueOf(整数);
}
});
订户mySubscriber=新订户(){
@凌驾
未完成的公共无效(){
System.out.println(“未完成”);
}
@凌驾
公共无效申报人(可丢弃的e){
System.out.println(“onError:+e.getMessage());
}
@凌驾
public void onNext(字符串s){
System.out.println(“onNext:+s”);
}
};
myObservable.subscribe(mySubscriber);

它编译得很好。我错过了不链接订户的机会。谢谢你的建议。