2017-04-10 12 views
1

リクエストを使用してRetrofit 2でエラー応答を処理するにはどうすればよいですか?Retrofit 2でエラー応答を処理する方法は?

通常のケースではペットの配列を返し、リクエストに不正なパラメータがあるとエラーjsonオブジェクトを返すというプロセス応答が必要です。この2つの状況をどうすれば処理できますか?

thisチュートリアルを使用しようとしていますが、主な問題はノーマルとエラーjsonをオブジェクトにマッピングすることです。

マイ正常な応答例:

[ { 
    "type" : "cat", 
    "color": "black" 
}, 
{ 
    "type" : "cat", 
    "color": "white" 
} ] 

エラー応答例:

{"error" = "-1", error_description = "Low version"} 

私が得たもの:

Call<List<Pet>> call = getApiService().getPet(1); 
    Response<List<Pet>> response; 
    List<Pet> result = null; 

    try { 
     response = call.execute(); //line with exception "Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path" 
     if(!response.isSuccessful()){ 
      Error error = parseError(response); 
      Log.d("error message", error.getErrorDescription()); 
     } 
     if (response.code() == 200) { 
      result = response.body(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

答えて

1

レトロフィット2は、取扱いの異なるコンセプトを持っています「成功した」要求Retrofit 1よりも高い。Retrofit 2では、実行可能(APIに送信)され、応答を受け取っているすべてのリクエストは「成功」とみなされます。つまり、これらの要求に対しては、onResponseコールバックが起動され、リクエストが実際に成功したか(ステータス200-299)、エラーが発生しているか(ステータス400-599)手動で確認する必要があります。

リクエストが正常に終了した場合は、レスポンスオブジェクトを使用して必要な処理を実行できます。エラーが実際に失敗した場合(ステータス400〜599を覚えておいてください)、問題に関する適切な情報をユーザに提示します。 (通常の場合)ペットアレイ及びエラー応答(要求が悪いparatersを有する場合):

詳細このlink

+1

を参照するために私は主な問題は、プロセス2つのJSONオブジェクトであることが、理解しています。 –

関連する問題