RxJava - 立即执行单个 Observable - 为什么?
RxJava - single Observable executing right away - why?
我有一个非常简单的 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 ?
我想要发生的事情:订阅仅在我调用 integerToStringEmitter.subscribe();
时开始
当前发生了什么:一旦我启动程序,onNext 就会被调用并且 UI 元素被设置为 #4。为什么?我需要更多地控制这个东西,所以它不会在我没有订阅的情况下立即执行。请帮忙解决。
我不确定你想要达到什么目的。您的代码看起来不正确,甚至不应该编译。如果它可以编译,那么 subscribe(new Observer() {... 部分显然会触发事件流。
这是一个 Observable 发射整数并将它们映射到字符串和订阅它的 Observer 的简单示例:
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);
我有一个非常简单的 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 ?
我想要发生的事情:订阅仅在我调用 integerToStringEmitter.subscribe();
时开始当前发生了什么:一旦我启动程序,onNext 就会被调用并且 UI 元素被设置为 #4。为什么?我需要更多地控制这个东西,所以它不会在我没有订阅的情况下立即执行。请帮忙解决。
我不确定你想要达到什么目的。您的代码看起来不正确,甚至不应该编译。如果它可以编译,那么 subscribe(new Observer() {... 部分显然会触发事件流。
这是一个 Observable 发射整数并将它们映射到字符串和订阅它的 Observer 的简单示例:
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);