[英]Can't process weather json in Android correctly using Jackson
我在AsyncTask<Object,Void,GenericResults>
中使用了此方法,其中GenericResults是一個類,用於存儲來自應用程序的許多不同結果,例如當前位置的緯度,經度和壓力。 我將在AsyncTask的參數中創建的GenericResults對象傳遞給它,並使其添加上述值,然后返回修改后的對象(所有這些都在doInBackground中)。
我使用的天氣API是位於此處的 weatherunderground。
我遇到的問題有兩個:遍歷json,如果我告訴它在JsonToken.END_OBJECT
停止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());
}
}
在嘗試執行任何.equals()
之前,必須稍微解析一下解析器邏輯並確保該值不為null。
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.