从服务器反序列化错误响应时的NPE

时间:2016-06-08 13:48:41

标签: java android gson

我从服务器获得响应,然后使用Gson将其反序列化为相应的Object。

问题是有时候我得到一个错误响应(当然不是我期望的Object类型)并导致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 个答案:

答案 0 :(得分:1)

在尝试解析正文之前,您需要检查Response是否有效。像这样:

X_batch, Y_batch = tf.train.batch([image, label], batch_size=64)

# Alternatively, `X_shape = [None, 32, 32, 3]`
X_shape = tf.TensorShape([None]).concatenate(X_batch.get_shape()[1:])
# Alternatively, `Y_shape = [None, 10]`
Y_shape = tf.TensorShape([None]).concatenate(Y_batch.get_shape()[1:])

# Create tensors that can be fed with a less specific shape
# than `X_batch`, `Y_batch`.
X = tf.placeholder_with_default(X_batch, shape=X_shape)
Y = tf.placeholder_with_default(Y_batch, shape=Y_shape)

请在此处查看食谱:https://github.com/square/okhttp/wiki/Recipes

BTW:你的问题是问题是“反序列化时的NPE ......”与问题没有关系,一个更好的主题可能是“我怎样才能找到OKHttp响应错误?”