我是使用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()
}
}
答案 0 :(得分:2)
您必须在循环中添加一个检查以查看观察者是否仍然订阅:
while ((newLine = reader.readLine()) != null && !observer.isUnsubsribed()) {
System.out.println("printing tweet: $newLine")
observer.onNext(newLine)
}