我想在外面获得AsyncTask。在任务数据中

时间:2017-05-24 17:08:30

标签: java android

我的代码是:

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(),但结果是一样的。

1 个答案:

答案 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,否则抛出。

Documentation here

在简历中,您必须获取列表的第一个值,然后获取属性description

  

恢复

你应该这样做:

JSONObject weather = weathers.getJSONObject(FIRST_ELEMENT);

而不是:

JSONObject weather = weathers.getJSONObject(0);