如何使用改造处理空响应或空响应

时间:2017-07-07 14:32:36

标签: java android retrofit

从服务器,有时我们得到一个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";
}

1 个答案:

答案 0 :(得分:2)

您可以创建一个默认回调,以您希望的方式处理空响应。例如,调用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
    }
}));