2017-11-06 12 views
0

こんにちは、私はアンドロイドアプリでLiveDataRxJava2を使用しています。私は以下を使用してhttp呼び出しを行っていますandroidのrxjava2でのエラー処理方法

@Inject 
lateinit var retrofit: Retrofit 

override fun doServerLoginApiCall(email: String, password: String): LiveData<LoginResponse> { 
    val liveData = MutableLiveData<LoginResponse>() 

    retrofit.create(RestApi::class.java).login(email, password) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe { loginResponse -> 
       liveData.setValue(loginResponse); 
      } 

    return liveData 
} 

上記のコードでは、次のようなエラーをどのように処理できますか。

when (e) { 
    is HttpException -> { 
     val responseBody = (e as HttpException).response().errorBody() 
     responseBody?.let { 
      view?.onUnknownError(getErrorMessage(it)) 
     } 
    } 
    is SocketTimeoutException -> { 
     view?.onTimeout() 
    } 
    is IOException -> { 
     view?.onNetworkError() 
    } 
    else -> { 
     e.message?.let { 
      view?.onUnknownError(it) 
     } 
    } 
} 

答えて

2

あなたがブロックをサブスクライブするためのonError実装する場合、あなたはこのようにそれを行うことができます。

retrofit.create(RestApi::class.java).login(email, password) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(
       // success 
       { loginResponse -> 
        liveData.setValue(loginResponse) 
       }, 
       // error 
       { e -> handleError(e) }) 

... 

fun handleError(e: Throwable) { 
    when (e) { 
    ... 
} 
関連する問題