有时我们从服务器收到的响应为 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";
}
最佳答案
您可以创建一个默认回调,以您想要的方式处理空响应。例如,调用 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
}
}));
关于java - 如何使用改造处理空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44973399/