考虑以下课程:
public class TestRepository {
private TestApiService apiService = new TestApiService();
public Observable<String> fetchString() {
return apiService.stringFromApi();
}
public Observable<String> listenToFetchStringPassively() {
// ???
}
}
调用fetchString()
并订阅它将使用api服务从互联网上获取字符串。
我想要做的是拥有另一个可观察的东西,它不会主动获取某些内容,而是被动地“监听”由fetchString()
返回的观察者发出的任何项目并转发它们。
我的方法是:
public class TestRepository {
private TestApiService apiService = new TestApiService();
private Subscriber<? super String> passiveSubscriber;
public Observable<String> fetchString() {
return apiService.stringFromApi()
.doOnNext(new Action1<String>() {
public void call(String s) {
passiveSubscriber.onNext(s);
}
})
.doOnCompleted(new Action0() {
public void call() {
passiveSubscriber.onCompleted();
}
});
}
public Observable<String> listenToFetchStringPassively() {
return Observable.create(new Observable.OnSubscribe<String>() {
public void call(Subscriber<? super String> subscriber) {
passiveSubscriber = subscriber;
}
});
}
}
哪个有效,但看起来很笨拙。是否有更优雅的方式实现这一目标?