2016-11-16 69 views
0

我在我的Android应用程序上使用RxJava,我遇到onError问题。RxJava Android 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 

任何想法为什么?

+0

您是否可以删除observeOn并使用Schedulers.io()进行subscribeOn并再次验证结果? –

+0

@HansWurst尝试,但我相信它需要更多的时间。大概从20秒到差不多2分钟 – Favolas

+0

嗯,我没有看到这里打破的东西。需要更多的代码来帮助调试。实际上,将operationalConfig中的所有内容都包装到Observable.defer中,以免阻止订阅。订阅上的onNext将在给定的调度程序上发生,但是输入和检查网络是否可用会在当前线程上发生。 –

回答

0

发现问题。

没有在这里发布代码,因为没有认为它是相关的。事实上,它是。

之间operationalLayer.operationalConfig和方法本身我有这样的:

@Override 
    public Observable<OerationalResponse> operationalConfig(OperationRequest operationalRequest) { 
     //Something 
     return network.opcoConfigs(opcoConfigRequest) 
       .retryWhen(//Something); 
    } 

,我传递给retryWhen我现在可以正确地处理错误的Func里面,这样,如果没有网络连接,重试机制立即停止, InternetException返回给用户。

+0

我有类似的问题,但我解决不了你的解释。请你看看:https://stackoverflow.com/questions/46202300/retrofit-rxjava-takes-long-time-to-invoke-onerror-when -server-连接faile/46213362#46213362 –

相关问题