GSONとRxJavaで改造を使用してネットワーク要求を実行しています。私は、Gsonライブラリがそれを変換することができないときに応答を得る方法を理解しようとしています。ハンドルの改造2 GSON変換エラー
これは、サーバーでエラーが発生し、応答がGsonライブラリが応答を変換しようとしているクラスと一致しない場合に発生します。
インターセプタを作成し、変換しようとする前にレスポンスをキャッシュするのが回避策です。しかし、これは単なる悪いプログラミングであり、同時リクエストを開始すると問題が管理不能になるためです。
サービスは次のように定義されています。レスポンスクラスには、ステータスコードとdataというジェネリックタイプのみが含まれています。
Retrofit getService() {
return new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(url)
.client(clientBuilder.build())
.build();
}
public Observable<Response<String>> userLogin(String username, String password) {
return getService().create(Account.class)
.login(username, password)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
サーバは、文字列以外の何かを返す場合、他の我々は要求を作成するコード
getService().userLogin(email, password)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(onSuccess(), onError());
protected Action1<Response<String>> onSuccess(){
return new Action1<Response<String>>() {
@Override
public void call(Response<String> response) {
// Process the response
}
};
}
protected Action1<Throwable> onError(){
return new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (throwable instanceof HttpException) {
ResponseBody body = ((HttpException) throwable).response().errorBody();
// Handle the error
}
}
};
のどこかに問題が発生します。オブジェクトや配列などです。ここで、GsonConverterFactoryは、onErrorメソッドによってキャッチされるエラーをスローします。私はどのように応答を得ることができますかと思います。
戻されるスロー可能オブジェクトはJsonSyntaxException
です。悲しいことに、GSONライブラリが変換しようとした元の応答本体は含まれていません。