【发布时间】:2017-03-30 17:48:45
【问题描述】:
我在我的 Android 应用上使用 RxJava,但 onError 有问题。
我正在这样做:
operationalLayer.operationalConfig(new OperationalRequest())
.subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.immediate())
.subscribe(new CustomSubscriber<OperationalResponse>(bundle, null) {
@Override
public void onNext(OperationalResponse response) {
//Do something
super.onNext(response);
}
});
在某些时候,在operationalConfig 方法中,我检查网络连接是否可用,如果不可用,则返回错误。
public Observable<OperationalResponse> operationalConfig(final OperationalRequest operationalRequest) {
if (!Network.hasInternet()) {
Log.d("No available internet for operationalConfig");
return Observable.error(new NoInternetException());
}
return Observable.defer....
}
比,在我的CustomSubscriber 我有这个:
@Override
public void onError(final Throwable e) {
if (e instanceof NoInternetException) {
// do something
Log.d("No internet connection available");
}
// other things
}
查看日志消息我有一个巨大的延迟,因为它检测到没有可用的互联网连接并且调用了onError 方法。
11-16 12:07:37.378 23779-24183 D/CustomTag: OperationalLayer No available internet for operationalConfig
11-16 12:07:57.459 23779-24416 D/CustomTag: CustomSubscriber No internet connection available
知道为什么吗?
【问题讨论】:
-
您能否删除observeOn并使用Schedulers.io()进行subscribeOn并再次验证结果?
-
@HansWurst 试过,但我相信这需要更多时间。大约从 20 秒到将近 2 分钟
-
嗯,我没有看到这里有问题。需要更多代码来帮助调试。实际上,将操作配置中的所有内容都包装到 Observable.defer 中,以免阻止订阅。订阅的 onNext 将发生在给定的调度程序上,但进入和检查网络是否可用将发生在当前线程上。
-
不。一样。没有更多的代码:(
-
你能把项目发布到 github 或其他什么地方,我将逐步检查代码并查找错误。