0

我正在尝试处理我将从 httprequest 获得的 json 到一个类中。但问题是当我尝试将数据保存到我的班级时,他会一直崩溃

Boolean hasmore = tree.get("has_more").getBooleanValue();
    if (hasmore == true) {
        System.out.println("Ik geraak hier");
        JsonNode resourceArrayNode=tree.get("photos");
        for(JsonNode jsonNode:resourceArrayNode){
            int height=jsonNode.get("height").getIntValue();
            result[i].setHeight(height);
            //System.out.println(result[i].getHeight());
            i++;
        }

所以这是处理图片高度的代码。问题是,当我使用 javaexceptionpointer 将其设置为我的班级时,他会崩溃,我觉得这很奇怪,因为一切都已正确设置

    Exception in thread "main" java.lang.NullPointerException
    at com.hp.gisware.panoramio.PanoramioResponseDeserializer.deserialize(PanoramioResponseDeserializer.java:29)
    at com.hp.gisware.panoramio.PanoramioResponseDeserializer.deserialize(PanoramioResponseDeserializer.java:15)
    at org.codehaus.jackson.map.ObjectReader._bindAndClose(ObjectReader.java:768)
    at org.codehaus.jackson.map.ObjectReader.readValue(ObjectReader.java:460)
    at com.hp.gisware.panoramio.GenericJsonPanoramioGeocoder.transmitLocation(GenericJsonPanoramioGeocoder.java:33)
    at com.hp.gisware.panoramio.PanoramioRunner.main(PanoramioRunner.java:26)
Disconnected from the target VM, address: '127.0.0.1:58050', transport: 'socket'
4

3 回答 3

1

听起来您在写入结果数组时遇到了空指针异常。是否已正确初始化?将此 JSON 数组(可以是任何长度)写入 java 数组(以固定长度声明)似乎是一个糟糕的选择。您可以使用像列表这样的集合吗?

那个或 get("Height") 都返回 null。您可能应该在取消引用之前检查它:

if(jsonNode.has("Height")) {
    int height=jsonNode.get("height").getIntValue();
    result[i].setHeight(height);
}

否则,请在问题中包含 java 异常消息。

编辑:(添加堆栈跟踪)嗯,这很奇怪。堆栈跟踪看起来不像来自您的代码 - 至少没有任何方法名称与您发布的代码中的任何内容匹配。这可能来自另一个线程吗?可能您的代码触发了另一个线程中的代码来发送/接收 JSON 消息?您可以尝试添加一个 try-catch 块来捕获 NullPointerException,以验证它确实是从这段代码中抛出的

于 2013-08-02T10:54:03.433 回答
0

问题解决了我没有声明每个对象结果不是它的类的新对象

于 2013-08-02T12:24:11.387 回答
0

有许多库可以帮助您将 json 对象解析为 Java 类。谷歌的 GSON https://code.google.com/p/google-gson/

和杰克逊 http://jackson.codehaus.org/

我想你似乎在使用杰克逊。请指定您使用的库和版本并发布堆栈跟踪,以便我们进一步帮助您。而且,我们似乎生活在同一个国家:荷兰。

于 2013-08-02T10:48:53.697 回答