2017-11-06 5 views
0

안녕하세요, 안드로이드 앱에 LiveDataRxJava2을 사용하고 있습니다. 다음을 사용하여 http 전화를 걸고 있습니다.rxjava2 in android에서 에러 처리하는 방법

@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 
} 

위 코드에서 아래와 같은 오류를 어떻게 처리 할 수 ​​있습니까? 당신이 당신의 가입 블록의 OnError 구현하려면

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

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

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) { 
    ... 
}