2017-06-16 34 views
1

當我使用Observable.subscribe()通常返回一次性。爲什麼rxjava Observable.subscribe(觀察者)返回void?

但是Observable.subscribe(Observer)返回void。

所以我不能處理Observable.subscribe(Observer)。

根據introtorx.com Observable.subscribe(Obeserver)返回一次性。

爲什麼rx和rxjava不同?

++++++++++++++

我在Android中Studio中使用compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/Observable.java#L10831

public final void subscribe(Observer<? super T> observer) { 
    ... 
} 

[[1]:https://i.stack.imgur.com/0owg1.png][1]

[[2]:https://i.stack.imgur.com/7H4av.jpg][2]

回答

0

您使用的是RxJava的哪一個版本?隨着RxJava2(io.reactivex.rxjava2):

public abstract class Observable<T> implements ObservableSource<T> { 
    ... 
    public final Disposable subscribe() {...} 
    ... 
} 
+0

我在AndroidStudio上使用compile'io.reactivex.rxjava2:rxandroid:2.0.1' – coolsik

+0

https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/ Observable.java public final void subscribe(觀察者觀察者){ ... } – coolsik

+0

何正確!這是因爲'Observer'接收'onSubscribe(...)'中的'Disposable'。您必須改用'Consumer'。 –

1

這可能是因爲反應流合同。

Reactive Stream README

public interface Publisher<T> { 
    public void subscribe(Subscriber<? super T> s); 
} 

Publisher的接口被定義返回空隙。 RxJava Flowable實現了該接口。 RxJava Observable也遵循該合同。

因此,他們提供subscribeWith()返回給您Disposable而不是void。或者你可以使用那些可以給你一次性過載的過載方法:例如:subscribe(consumer<T>,consumer<Throwable>,action)

PS:高於我的猜測。我不確定。

+0

確認。你可以閱讀更多[這裏](https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#subscriber)和[在這個問題中](https://stackoverflow.com/questions/44640844/subscribewith-VS-訂閱功能於rxjava2android)。 – Incinerator

0

在RxJava2中,Disposable對象被傳遞給Observer的onSubscribe回調方法。您可以從onSubscribe回調方法中獲取Disposable對象,並在訂閱觀察者到observable後的較晚時間使用它來處置訂閱。

相關問題