2017-07-07 59 views
1

从服务器,有时我们得到的响应为空或空。因此,我们的代码会在一些空指针异常时崩溃。我们不希望在代码中的任何地方都有空的检查。当改进响应为空或空时,是否有方法指定默认值?在下面的代码中,这是我们如何根据具体情况处理它的方法。但是,我们不想为每个对象编写这个逻辑。我们希望以某种方式在应用程序级别执行此操作。那可能吗?如何使用改进处理空或空响应

@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

您可以创建一个默认回调,以您想要的方式处理空响应。例如,拨打电话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

是的,除非你不关心回应(我认为并非如此)。 –