2017-10-11 74 views
0

我正在使用RxJava進行網絡調用,並且在每次請求之前我需要檢查網絡。 目前爲每個請求我這樣做。RxJava,在每個API調用之前進行網絡檢查的最佳方式

   checkNetwork() 
      .andThen(netWorkCall()) 
      .subscribe(new DisposableSubscriber<String>() { 
       @Override 
       public void onNext(String s) { 
        Log.d(TAG, "onNext: " + s); 
       } 

       @Override 
       public void onError(Throwable t) { 
        Log.d(TAG, "onError: " + t.getMessage()); 
       } 

       @Override 
       public void onComplete() { 
        Log.d(TAG, "onComplete: "); 
       } 
      }); 
      } 


      private Completable checkNetwork() { 
       return NetworkUtils.isConnected() ? Completable.complete() : Completable.error(new Throwable("Network Error")); 
      } 

      private Flowable<String> netWorkCall() { 
       return Flowable.just("Api response"); 
      } 

這是推薦的方式還是有沒有比這更好的方法?提前致謝!!

+0

您爲什麼需要檢查網絡?如果沒有連接,就會出現錯誤,您可以在'onError' – Benjamin

回答

1

通常你以前不檢查網絡。更好地嘗試發送呼叫並在請求失敗時捕獲錯誤。

在您的存儲庫中查詢網絡,您可以對連接進行預驗證並在網絡連接失敗時引發異常。

這意味着:

networkCall() 
    .subscribe( 
    success -> { ... }, 
    error -> { doSomethingWhenErrorHappened() } 
    ); 

private Flowable<String> netWorkCall() { 
    return networkAvailable() ? Flowable.just(...) : Flowable.error(...);   
} 

那是不言而喻的方式。

您應該考慮使用SingleMaybe,因爲網絡請求通常只返回數據1c或錯誤。 Flowable是爲使用流而設計的。

+0

內部管理它,但是如果我有_n_個網絡呼叫數量,則無論在哪裏,我都必須重複 'networkAvailable()? Flowable.just(...):Flowable.error(...);'這個儀式? – Jrd

+0

通常你不檢查網絡。你只是發送電話。如果沒有網絡連接可用,它會引發錯誤。 –

+0

好吧,忘記網絡電話,其他任何用例都必須在每次請求之前完成! – Jrd

相關問題