gpt4 book ai didi

java - RxJava - 嵌套的 Observables? ( retrofit )

转载 作者:行者123 更新时间:2023-11-30 01:01:32 24 4
gpt4 key购买 nike

我面临的问题是我需要身份验证 token 来创建我的 Retrofit 服务。我目前使用一个 Observable 来获取所述 token ,导致一个相当丑陋的 Observable 构造:

Observable<MyService> observable = application.getMyService();
observable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler())
.subscribe(new Subscriber<MyService>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {
Log.e(TAG, "Error creating service: ", e);
}

@Override
public void onNext(MyService myService) {
subscription = myService.searchStuff(searchFor)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(application.defaultSubscribeScheduler())
.subscribe(new Subscriber<AResponseWrapper>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable error) {
Log.e(TAG, "Error loading stuff: ", error);
}

@Override
public void onNext(AResponseWrapper wrapper) {
MainPresenter.this.stuff = wrapper.getStuff();
}
});
}
});

我不禁觉得这不是应该的做法。我说得对吗?

最佳答案

Observable.flatMap 正是我要找的。它允许将结果映射到另一个可观察对象:

Observable<MyService> observable = application.getMyService();
subscription = observable
.observeOn(application.defaultSubscribeScheduler())
.subscribeOn(application.defaultSubscribeScheduler())
.flatMap(service -> service.searchStuff(searchFor))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<AResponseWrapper>() {
@Override
public void onCompleted() {
if (series.size() < 1) {
mainView.showMessage(R.string.no_stuff_found);
} else {
mainView.showStuff(stuff);
}
}

@Override
public void onError(Throwable error) {
Log.e(TAG, "Error loading stuff: ", error);
}

@Override
public void onNext(AResponseWrapper wrapper) {
MainPresenter.this.stuff= wrapper.getStuff();
}
});

请注意,我首先在 IO Scheduler 上观察,只有在 flatMap 之后我才会在主线程上订阅。否则 service.searchStuff 调用(至少我认为是那部分)将在主线程上执行,产生 NetworkOnMainThreadException

感谢@ahmed-ashraf-g 向我指出了这个 answer .

关于java - RxJava - 嵌套的 Observables? ( retrofit ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com