当我以匿名类型创建新的Observer时,它工作正常:
Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();
postsListObservable.
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).subscribe( new Observer<List<Post>>() {
@Override
public void onSubscribe(Disposable d) {
Log.i("ZOKa", "onSubscribe: ");
}
@Override
public void onNext(List<Post> posts) {
Log.i("ZOKa", "onNext: " + posts.size());
}
@Override
public void onError(Throwable e) {
Log.i("ZOKa", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.i("ZOKa", "onComplete: ");
}
});
当我将观察者创建为动态类型时,它不会发出数据
Observable<List<Post>> postsListObservable = mApplicationAPI.getPosts();
postsListObservable.
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread());
Observer<List<Post>> observer = new Observer<List<Post>>() {
@Override
public void onSubscribe(Disposable d) {
Log.i("ZOKa", "onSubscribe: ");
}
@Override
public void onNext(List<Post> posts) {
Log.i("ZOKa", "onNext: " + posts.size());
}
@Override
public void onError(Throwable e) {
Log.i("ZOKa", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.i("ZOKa", "onComplete: ");
}
};
postsListObservable.subscribe(observer);
第一个代码段的Logcat:
com.tripleService.basesetupfordi / I / ZOKa:onSubscribe:com.tripleService.basesetupfordi / I / ZOKa:onNext:100:com.tripleService.basesetupfordi / I / ZOKa:onComplete:
第二个的Logcat:
com.tripleService.basesetupfordi / I / ZOKa:onError:null
所以,两者之间的区别是什么?
这是因为运算符返回了新的可观察对象,但是他们没有修改被调用的可观察对象。第二个示例中的subscribeOn
和observeOn
对postsListObservable
和observer
没有影响。