我的代码是:
public String search ="hello";
public void WeatherSearch() {
new GeneralAPI(new OnCompletionListener() {
@Override
public void onComplete(String result) {
try {
JSONObject jObj = new JSONObject(result);
JSONObject cord = null;
cord = jObj.getJSONObject("coord");
JSONObject main = jObj.getJSONObject("main");
main.getString("temp");
JSONArray weathers = jObj.getJSONArray("weather");
JSONObject weather = weathers.getJSONObject(0);
String icon = weather.getString("icon");
search = weather.getString("description");
System.out.println(search);
} catch (JSONException e) {
e.printStackTrace();
}
}
}).execute("http://api.openweathermap.org/data/2.5/weather?lat=37.276101&lon=127.130824&APPID=52411ebbc405b9763828164dda220d19");
System.out.println(" ㅇㅇ " +search);
}
仅在搜索中搜索打印 - >晴空等...... 但是ㅇㅇ+搜索打印 - >你好......
但我希望获得清晰的天空数据。
我正在尝试execute().get()
,但结果是一样的。
答案 0 :(得分:0)
看看你的json:
"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]
天气没有属性描述,列表中的对象有它,所以,你必须获取weather
json对象的第一个元素,然后执行.getString("description")
。
weathers.getJSONObject(0); is wrong, because it takes an String:
getJSONObject(String name)返回按名称映射的值(如果是) 存在并且是JSONObject,否则抛出。
在简历中,您必须获取列表的第一个值,然后获取属性description
恢复
你应该这样做:
JSONObject weather = weathers.getJSONObject(FIRST_ELEMENT);
而不是:
JSONObject weather = weathers.getJSONObject(0);