2016-12-30 32 views
0

我從改造,我想實現的錯誤處理,特別是連接超時產生可觀察到的。在錯誤的用戶會被調用得很好,但應用程序仍用了socketTimeout錯誤崩潰。有什麼建議?rxJava錯誤捕獲socketTimeoutException

Observable<History> history = api.returnHistoryRX(pair, String.valueOf(unixTime-3600), String.valueOf(unixTime)); 

history.onErrorReturn(throwable -> null); 

用戶

public void getPriceNow(Observable<List<history>> history, String pair) { 
     Timestamp timestamp2; 
     timestamp2 = new Timestamp(System.currentTimeMillis()); 


     history.subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(history1 -> { 
        String currentValue; 

        if (history1.size()>0){ 
         System.out.println("testing rx"); 

        } 
       }, e->System.out.println("getPriceNow: error called")); 
    } 

來測試我的超時設置的東西與okhttp

private OkHttpClient.Builder httpClient = new OkHttpClient.Builder() 
     .connectTimeout(30, TimeUnit.MILLISECONDS) 
     .readTimeout(30L, TimeUnit.MILLISECONDS) 
     .writeTimeout(100L, TimeUnit.MILLISECONDS); 

錯誤鏈看起來像這樣不合理的低:

的java.lang。 IllegalStateException:在Scheduler.Worker線程上拋出異常。添加onError處理。

產生的原因:rx.exceptions.OnErrorNotImplementedException:連接失敗

產生的原因:java.net.SocketTimeoutException:連接失敗

回答

1

當你調用history.onErrorReturn(...),該方法返回一個新Observable用適當的行爲應用。你需要在你想要應用錯誤處理行爲的地方使用返回的observable。在你的情況下,改變

history.onErrorReturn(throwable -> null); 

history = history.onErrorReturn(throwable -> null); 

或將其移動到您初始化變量history它可能是那樣簡單。

+0

這是100%正確的。我居然發現了墜毀沒有發生由於這些要求,但其他地方的應用進行相同的調用。我刪除了位後導致崩潰我仍然有onErrorReturn的問題沒有發射過,使這一更新修復完全。沒有這個,我可能會一直盯着幾個小時,所以謝謝你! – massphoenix