2017-07-07 68 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

是的,除非你不關心迴應(我認爲並非如此)。 –