2016-11-16 162 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 –

相關問題