2017-11-06 3 views
2

こんにちは私は、subscribeWithで改造エラー処理のためにContextWrapperを改造しました。私はhttps://blog.mindorks.com/rxjava2-and-retrofit2-error-handling-on-a-single-place-8daf720d42d6のような何かをしたいsubscribeWithでContextWrapperクラスを使用する方法

ApiHelperImpl().doServerLoginApiCall(email, password) 
        .subscribeOn(Schedulers.io()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribeWith(CallbackWrapper<LoginResponse> { 

        }) 

enter image description here

以下のようにこれを使用しようとしています

abstract class CallbackWrapper<T : BaseResponse> : DisposableObserver<T>() { 

    protected abstract fun onSuccess(t: T) 

    override fun onNext(t: T) { 
     //You can return StatusCodes of different cases from your API and handle it here. I usually include these cases on BaseResponse and inherit it from every Response 
     onSuccess(t) 
    } 

    override fun onError(e: Throwable) { 
     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) 
       } 
      } 
     } 
    } 


    override fun onComplete() { 

    } 

    private fun getErrorMessage(responseBody: ResponseBody): String { 
     val jsonObject = JSONObject(responseBody.string()) 
     return jsonObject.getString(("message")) 
    } 
} 

はそれを行う方法を誰もが知っていますか?あなたのようにそれを呼び出す必要がありkotlinにあなたはCallbackWrapper<LoginResponse>()を置くことや抽象クラスをインスタンス化する必要が

+0

あなたは '' subscribeWith(新しいCallbackWrapper (ビュー)にしてみてくださいました? – mutantkeyboard

+1

@mutantkeyboardもしあなたが私の 'CallbackWrapper'を見ると私はビューを持っていません –

答えて

4

object: AbstractClass(...params){}

ApiHelperImpl().doServerLoginApiCall(email, password) 
    .subscribeOn(Schedulers.io()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribeWith(object: CallbackWrapper<LoginResponse>() { 
     override fun onSuccess(r: LoginResponse) { } 
    }) 
+0

私の' CallbackWrapper'が表示されていて、私はビューを持っていませんし、オブジェクトを作成するためにKotlinの新しい演算子が必要ですか? –

+0

' 、あなたが投稿したサンプルURLに表示される 'new'演算子についてです。 – pleft

+0

はい、私はneを必要としないと思いますw演算子はkotlinで初期化されます。私が間違っていると私を修正してください。 –

関連する問題