2016-06-08 68 views
1

我收到來自服務器的響應,並使用Gson將其反序列化爲相應的對象。從服務器反序列化錯誤響應時的NPE

問題是,有時我得到一個錯誤響應(這是當然不是我期望的對象的類型),並導致NullPointerException。 我該如何處理這種情況?

我的代碼是:

 Response pollsResponse = okHttpClient.newCall(pollsRequest).execute(); 

     String pollsResponseString = pollsResponse.body().string(); 

     // Gson Type for List of Poll.class oObjects 
     Type listType = new TypeToken<ArrayList<Poll>>() { }.getType(); 
     pollsList = gson.fromJson(pollsResponseString, listType); 

當有一個錯誤的代碼最後一行給NPE。我要如何檢查項目是不是ArrayList<Poll>類型,所以我不會反序列化它?

編輯:我不明白爲什麼我的問題是相似的鏈接?我知道什麼是NPE。我不知道如何處理我不希望從網絡電話導致NPE的結果。糾正我,如果我錯了。

+1

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -it) – 2016-06-08 13:54:09

回答

1

在嘗試分析正文之前,您需要檢查Response是否有效。事情是這樣的:

if (!pollsResponse.isSuccessful()) 
    throw new IOException("Unexpected reply " + pollsResponse); 

看到這裏的食譜:https://github.com/square/okhttp/wiki/Recipes

BTW:你的問題的問題是,受「NPE反序列化時......」是不是真的有關的問題,一個更好的主題可能是「我如何查找OKHttp響應錯誤?」

+0

是的你是對的。我認爲這與java有關。對不起,謝謝你的回答和你的觀點。 – Mes

+1

@Mes - 沒問題。請注意,如果服務器有一天決定不向您發送JSON,這不會完全覆蓋您 - 例如,如果它移動回家,或被黑客攻擊或類似。我相信你不那麼擔心這些邊緣情況,但不要忘記,你無法控制的東西可能會給你帶來任何東西! – Matthew

+0

這是真的,但現在是我最擔心的問題:P – Mes