【问题标题】:Can't process weather json in Android correctly using Jackson无法使用 Jackson 正确处理 Android 中的天气 json
【发布时间】:2015-02-12 19:31:56
【问题描述】:

我在AsyncTask<Object,Void,GenericResults> 中有这个方法,GenericResults 是我存储来自我的应用程序的一堆不同结果的类,例如当前位置的纬度、经度和压力。我传递了我在 AsyncTask 的参数中创建的 GenericResults 对象,并让它添加上述值,然后返回修改后的对象(所有这些都在 doInBackground 中)。

我使用的天气 API 是 weatherunderground 的,位于 here

我遇到的问题是双重的:只是遍历 json,如果我告诉它在 JsonToken.END_OBJECT 停止,它只会到 JSON 中的第一个 },所以它永远不会到达我的位置希望它停止。最重要的是,如果我在此方法中使用任何fieldName.equals(),我会不断收到空指针异常。获取pressure_mb字段内容的正确方法是什么?

private void getWebPressure(String longitude, String latitude) {
    HttpURLConnection conn;
    try {
        URL weatherUrl = new URL("http://api.wunderground.com/api/"+API_KEY+"/conditions/q/"+latitude+","+longitude+".json");
        conn = (HttpURLConnection) weatherUrl.openConnection();
        InputStream in = new BufferedInputStream(conn.getInputStream());
        JsonFactory factory = new JsonFactory();
        JsonParser parser = factory.createParser(in);
        boolean done = false;
        while (!done) {
            parser.nextToken();
            String fieldName = parser.getCurrentName();
            parser.nextToken();
            Log.v(LOG_TAG, fieldName + " " + parser.getValueAsString());
            if (fieldName.equals("pressure_mb")) {
                done = true;
                result.setPressure(parser.getValueAsString());
            }
        }
        conn.disconnect();
    }
    catch(IOException e){
        Log.e(LOG_TAG,e.toString());
    }
}

【问题讨论】:

    标签: java android json jackson


    【解决方案1】:

    在尝试执行任何.equals()之前,必须稍微切换一下解析器逻辑并确保值不为空

    while (parser.nextToken() != null && !done) {
                parser.nextToken();
                String name = parser.getCurrentName();
                if (name!=null){
                    if (name.equals("pressure_mb")) {
                        parser.nextToken();
                        String value = parser.getText();
                        Log.v(LOG_TAG,value);
                        result.setPressure(value);
                        break;
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2021-11-16
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2015-02-08
      • 2014-01-05
      相关资源
      最近更新 更多