rxjava和终止流

时间:2015-01-03 17:01:23

标签: stream observable rx-java

我是使用rxjava进行反应式编程的新手,在阅读了更简单的示例后,我现在试图弄清楚如何使用连续流。我在下面的示例中遇到的问题是,在我采用3个元素后,程序不会终止。我的假设是我在某种程度上需要取消订阅我的观察,但我还没有完全掌握如何终止while循环并让程序退出。

我发现以下帖子RxJava -- Terminating Infinite Streams,但我仍然无法弄清楚我错过了什么。

class MyTwitterDataProvider {
/*
This example is written in Groovy

Instance variables and constructor omitted
*/

public Observable<String> getTweets() {
    BufferedReader reader = new BufferedReader(new InputStreamReader(getTwitterStream()))

    Observable.create({ observer ->
        executor.execute(new Runnable() {
            def void run() {
                String newLine
                while ((newLine = reader.readLine()) != null) {
                    System.out.println("printing tweet: $newLine")
                    observer.onNext(newLine)
                }

                observer.onCompleted()
            }
        })
    })
}

def InputStream getTwitterStream() {
// code omitted
}

public static void main (String [] args) {
    MyTwitterDataProvider provider = new MyTwitterDataProvider()
    Observable<String> myTweetsObservable = provider.getTweets().take(3)

    Subscription myTweetSubscription = myTweetsObservable.subscribe({tweet-> println("client prints: $tweet")})
   // myTweetSubscription.unsubscribe()
}
}

1 个答案:

答案 0 :(得分:2)

您必须在循环中添加一个检查以查看观察者是否仍然订阅:

            while ((newLine = reader.readLine()) != null && !observer.isUnsubsribed()) {
                System.out.println("printing tweet: $newLine")
                observer.onNext(newLine)
            }