RxAndroid 不为观察者返回订阅
RxAndroid not returning Subcription for the observer
我已经开始学习 RxAndroid,下面是我编写的代码,用于迭代包含从服务器获取的数据的模型对象(结果)。我在可观察对象中迭代模型对象,并在观察者中提供一个新创建的对象。我正在尝试订阅观察者以在 Orientation changes 片段时取消订阅任务。但是 subscribe()
returns VOID 而不是订阅对象。
问题:
- 最新版本的 RxAndroid 会在 configuration/orientation 更改时自行处理取消订阅吗?
如果在任务完成之前发生配置更改,我能想到的重新启动此任务的唯一方法是,我将服务器响应保存在 onSavedInstance() 中,并在片段被重新创建。它需要布尔值来确定配置更改是否发生在配置更改之前。 有没有一种更优雅、更简洁的方法来处理这个问题?
private void createComicList(final List<Result> marvelResults) {
final MarvelComics marvelComics = new MarvelComics();
Observable marvelObservable2 = Observable.create(new ObservableOnSubscribe<MarvelComic>() {
@Override
public void subscribe(ObservableEmitter<MarvelComic> e) throws Exception {
for(Result result : marvelResults) {
MarvelComic marvelComic = new MarvelComic();
marvelComic.setDescription(result.getDescription());
marvelComic.setTitle(result.getTitle());
marvelComic.setPageCount(result.getPageCount());
marvelComic.setThumbnailUrl(result.getThumbnail().getPath());
marvelComic.setId(result.getId());
e.onNext(marvelComic);
}
e.onComplete();
}
});
marvelObservable2.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MarvelComic>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(MarvelComic comic) {
marvelComics.getMarvelComicList().add(comic);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
showToast();
}
});
}
Observable 的 subscribe() 方法 returns RxJava 早期版本和当前版本中的订阅对象 returns Disposble 的对象 class 可以通过调用 dispose() 方法取消订阅.
对于你的第二个问题,你可以查看这个答案Best practice: AsyncTask during orientation change
2.x 中的 Observable.subscribe(Observer<? super T>)
方法 returns void
因为 Observer.onSubscribe(Disposable)
是为了获得过去 [=14] 的取消支持=] 在 1.x 中。
final CompositeDisposable composite = new CompositeDisposable();
Observable<Integer> source = Observable.just(1)
source.subscribe(new Observer<Integer>() {
@Override public void onSubscribe(Disposable d) {
composite.add(d); // <---------------------------------------------
}
@Override public void onNext(Integer t) {
System.out.println(t);
}
@Override public void onError(Throwable e) {
e.printStackTrace();
}
@Override public void onComplete() {
System.out.println("Done");
}
});
composite.add(source
.subscribeWith( // <-----------------------------------------------
new DisposableObserver<Integer>() {
@Override public void onNext(Integer t) {
System.out.println(t);
}
@Override public void onError(Throwable e) {
e.printStackTrace();
}
@Override public void onComplete() {
System.out.println("Done");
}
});
我已经开始学习 RxAndroid,下面是我编写的代码,用于迭代包含从服务器获取的数据的模型对象(结果)。我在可观察对象中迭代模型对象,并在观察者中提供一个新创建的对象。我正在尝试订阅观察者以在 Orientation changes 片段时取消订阅任务。但是 subscribe()
returns VOID 而不是订阅对象。
问题:
- 最新版本的 RxAndroid 会在 configuration/orientation 更改时自行处理取消订阅吗?
如果在任务完成之前发生配置更改,我能想到的重新启动此任务的唯一方法是,我将服务器响应保存在 onSavedInstance() 中,并在片段被重新创建。它需要布尔值来确定配置更改是否发生在配置更改之前。 有没有一种更优雅、更简洁的方法来处理这个问题?
private void createComicList(final List<Result> marvelResults) { final MarvelComics marvelComics = new MarvelComics(); Observable marvelObservable2 = Observable.create(new ObservableOnSubscribe<MarvelComic>() { @Override public void subscribe(ObservableEmitter<MarvelComic> e) throws Exception { for(Result result : marvelResults) { MarvelComic marvelComic = new MarvelComic(); marvelComic.setDescription(result.getDescription()); marvelComic.setTitle(result.getTitle()); marvelComic.setPageCount(result.getPageCount()); marvelComic.setThumbnailUrl(result.getThumbnail().getPath()); marvelComic.setId(result.getId()); e.onNext(marvelComic); } e.onComplete(); } }); marvelObservable2.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<MarvelComic>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(MarvelComic comic) { marvelComics.getMarvelComicList().add(comic); } @Override public void onError(Throwable e) { } @Override public void onComplete() { showToast(); } }); }
Observable 的 subscribe() 方法 returns RxJava 早期版本和当前版本中的订阅对象 returns Disposble 的对象 class 可以通过调用 dispose() 方法取消订阅.
对于你的第二个问题,你可以查看这个答案Best practice: AsyncTask during orientation change
2.x 中的 Observable.subscribe(Observer<? super T>)
方法 returns void
因为 Observer.onSubscribe(Disposable)
是为了获得过去 [=14] 的取消支持=] 在 1.x 中。
final CompositeDisposable composite = new CompositeDisposable();
Observable<Integer> source = Observable.just(1)
source.subscribe(new Observer<Integer>() {
@Override public void onSubscribe(Disposable d) {
composite.add(d); // <---------------------------------------------
}
@Override public void onNext(Integer t) {
System.out.println(t);
}
@Override public void onError(Throwable e) {
e.printStackTrace();
}
@Override public void onComplete() {
System.out.println("Done");
}
});
composite.add(source
.subscribeWith( // <-----------------------------------------------
new DisposableObserver<Integer>() {
@Override public void onNext(Integer t) {
System.out.println(t);
}
@Override public void onError(Throwable e) {
e.printStackTrace();
}
@Override public void onComplete() {
System.out.println("Done");
}
});