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