2016-06-08 70 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