2017-07-07 5 views
1

サーバーからは、nullまたは空の応答が得られることがあります。このため、私たちのコードはいくつかのヌルポインタ例外でクラッシュします。私たちはコード内でどこでもヌルチェックをしたくありません。レトロフィットレスポンスがnullまたは空の場合にデフォルト値を指定する方法はありますか?以下のコードでは、ケースバイケースで対応しています。しかし、私たちはすべてのオブジェクトに対してこのロジックを書きたくありません。アプリケーションのレベルで何とかしたいと思っています。それは可能ですか?改造を使用してヌルまたは空の応答を処理する方法

@SerializedName("isPdf") 
@Expose 
private String isPdf; 


public boolean getIsPdf() { 
    return !Util.isNullOrEmpty(isPdf) && isPdf.equalsIgnoreCase("true") ? true : false; 
} 

public void setIsPDF(boolean isPdf) { 

    this.isPdf = isPdf ? "true" : "false"; 
} 

答えて

2

あなたがnullの応答あなたが望むように扱うデフォルトのコールバックを作成することができます。たとえば、onFailure

public class DefaultCallback<T> implements Callback<T> { 

    private static final String TAG = "YOUR_TAG"; 
    private Callback<T> callback; 

    public DefaultCallback(Callback<T> callback) { 
     this.callback = callback; 
    } 

    @Override 
    public void onResponse(Call<T> call, Response<T> response) { 
     if (response.body() == null) { 
      callback.onFailure(call, new NullPointerException("Empty response")); 
     } else { 
      callback.onResponse(call, response); 
     } 
    } 

    @Override 
    public void onFailure(Call<T> call, Throwable t) { 
     Log.e(TAG, t.toString()); 
     callback.onFailure(call, t); 
    } 
} 

を呼び出してから、実装でこのコールバックを使用します。

Call<MyObject> call = ... //Create your call 
call.enqueue(new DefaultCallback<>(new Callback<MyObject>() { 
    @Override 
    public void onResponse(Call<MyObject> call, Response<MyObject> response) { 
     //Handle successful non-null responses 
    } 

    @Override 
    public void onFailure(Call<MyObject> call, Throwable t) { 
     //Handle errors/null responses 
    } 
})); 
+0

私はすべてのAPI呼び出しのための第二の部分を実装する必要がありますか? – stepheaw

+0

あなたが応答(私がそうでないと仮定している)について気にしない限り、そうです。 –

関連する問題