2017-09-19 7 views
0

私はライブラリプロジェクトで改造してRxJavaを使用しています。すべてが正常に動作している、私はデータを要求するときに期待される結果を得る。 APIクラスからユーザーのためにRxjavaの改造パースAPIエラーが発生しました

@GET(Routes.ME) 
fun getUserObservable(): Observable<User> 

fun getUser(): Observable<User> { 
    return usersService.getUserObservable() 
} 

このライブラリを使用する主なプロジェクトから、私はこのようなユーザーを取得する:

api.getUser().observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(Schedulers.io()) 
      .subscribe({ user -> 
         println("Get user success : $user") 
        }, { error -> 
         println("Get user error : $error") 
        }) 

すべてが正常に動作しているが、場合APIエラーが発生した場合、APIは次のように送信します。

{reason: "the reason of the error", details: "some details", type:"the type error"} 

私が望むのは、Observableエラーからエラーが発生したときにフロントが構築したいこのエラーを解析できないため、このエラーをフロントに明示的に提供することです。だから私の目的は、私のライブラリからこのエラーを解析し、提供されたAPI jsonでError POJOを構築し、フロントにエラーが発生したときに送信することです。エラーがAPIから来ていない場合は、正面に通常のエラーが表示されます。

+0

なぜrxKotlinのsubscribeByを使用していませんか? – ste9206

+0

あなたは正しいです、これは次のステップになりますが、まず自分の問題を解決する必要があります – ejay

答えて

0

エラー応答に例外をマップするには、retrofitのインスタンスが必要です。ここに例があります:

class Error(
     var reason: String = "", 
     var details: String = "", 
     var type: String = "" 
) 

api.getUser() 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe({ user -> 
      println("Get user success : $user") 
     }, { throwable -> 
      if (throwable is HttpException) { 
       val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray()) 
       val error = converter.convert(throwable.response().errorBody()) 
       println("Get user error : ${error.reason}") 
      } else { 
       println("Get user error : $throwable") 
      } 
     }) 
関連する問題