2016-09-01 12 views
0

RetrofitとGsonを使用してRESTサービスからデータを取得しています。それは完璧に動作しますが、APIがエラーを返さない場合のみです。通常、APIはオブジェクトのリスト(json)を返しますが、エラーが発生するとAPIは単一のエラーオブジェクトを返します。 Call<List<Link>>を取得しようとしていますが、APIエラーが発生したときにGson解析エラー(Expected BEGIN_OBJECT but was BEGIN_ARRAY)が表示されています。複数の改造応答とAPIのエラー処理

1つの文字列を取得してからエンキューのonResponse()応答を解析しようとしましたが、ここでは定型的なコードがたくさんあります。

この問題の解決策はありますか? APIのエラーを処理するには?

あなたは次の工事に使用することができます

答えて

0

@Override 
public void onResponse(Call<YourModel> call, Response<YourModel> response) { 
    if (response.isSuccessful()) { 
     // Do awesome stuff 
    } else if (response.code == 401) { 
     // Handle unauthorized 
    } else { 
     // Handle other responses 
    } 
} 

全答:あなたは応答型としてCall<JsonElement>使用し、それに応答して、それを解析することができ、あなたのケースではHow to get Retrofit success responce status codes

EDIT

call.enqueue(new Callback<JsonElement>() { 
     @Override 
     public void onResponse(Call<JsonElement> call, Response<JsonElement> response) { 
      if(response.isSuccessful()){ 
       JsonElement jsonElement = response.body(); 
       if(jsonElement.isJsonObject()){ 
        JsonObject objectWhichYouNeed = jsonElement.getAsJsonObject(); 
       } 
       // or you can use jsonElement.getAsJsonArray() method 
       //use any json deserializer to convert to your class. 
      } 
      else{ 
       System.out.println(response.message()); 
      } 
     } 
     @Override 
     public void onFailure(Call<JsonElement> call, Throwable t) { 
      System.out.println("Failed"); 
     } 
    }); 
+0

orking、onFailure()のみが呼び出されます。メッセージを含むJSONを返すAPIですが、httpエラーではありません。 – rubin94

+0

@ rubin94私の更新を参照してください – neustart47

+0

ありがとう、これは私の問題の解決です。しかし、私はモデルクラスを変更し、カスタムデシリアライザを作成することに決めました。 – rubin94

関連する問題