Android开发:致命异常:AsyncTask#1

时间:2015-12-03 10:36:43

标签: android json api android-asynctask futuretask

我一直在努力学习Android开发。在经历了几个" Hello World"和简单的应用程序,我决定我想做一些我真正可以使用的东西:一个简单的天气应用程序。我找到了一个很好的tutorial,所以我跟着它。

我不是只是复制和粘贴它,而是一直在阅读它,尝试理解它并使其适应我自己的项目。

当我尝试在手机上运行时,我在Android显示器上出现此错误:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.anatis.ueder, PID: 29363
    java.lang.RuntimeException: An error occured while executing doInBackground()
      at android.os.AsyncTask$3.done(AsyncTask.java:304)
      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
      at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:818)
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
      at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
      at org.json.JSONTokener.nextValue(JSONTokener.java:94)
      at org.json.JSONObject.<init>(JSONObject.java:156)
      at org.json.JSONObject.<init>(JSONObject.java:173)
      at com.anatis.ueder.JSONWeatherParser.getWeather(JSONWeatherParser.java:17)
      at com.anatis.ueder.MainActivity$JSONWeatherTask.doInBackground(MainActivity.java:63)
      at com.anatis.ueder.MainActivity$JSONWeatherTask.doInBackground(MainActivity.java:55)
      at android.os.AsyncTask$2.call(AsyncTask.java:292)
      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:818)

ai,ai,ai ......我不知道这意味着什么! 我已经阅读了关于这个AsyncTask#1的其他帖子,但我无法弄清问题是什么。 我也不知道问题出在哪里,所以我不知道我应该在这里发布什么代码。 这个id为doInBackground()

@Override
    protected Weather doInBackground(String... params) {
        Weather weather = new Weather();
        String data = ( (new WeatherHttpClient()).getWeatherData(params[0]));

        try {
            weather = JSONWeatherParser.getWeather(data);

            // Let's retrieve the icon
            weather.iconData = ( (new WeatherHttpClient()).getImage(weather.currentCondition.getIcon()));

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return weather;
    }

,这是来自JSONWeatherParser.java的getWeather()

public static Weather getWeather(String data) throws JSONException {
    Weather weather = new Weather();

    // We create out JSONObject from the data
    JSONObject jObj = new JSONObject(data);

    // We start extracting the info
    Location loc = new Location();

    JSONObject coordObj = getObject("coord", jObj);
    loc.setLatitude(getFloat("lat", coordObj));
    loc.setLongitude(getFloat("lon", coordObj));

    JSONObject sysObj = getObject("sys", jObj);
    loc.setCountry(getString("country", sysObj));
    loc.setSunrise(getInt("sunrise", sysObj));
    loc.setSunset(getInt("sunset", sysObj));
    loc.setCity(getString("name", jObj));
    weather.location = loc;

    // We get weather info (This is an array)
    JSONArray jArr = jObj.getJSONArray("weather");

    // We use only the first value
    JSONObject JSONWeather = jArr.getJSONObject(0);
    weather.currentCondition.setWeatherId(getInt("id", JSONWeather));
    weather.currentCondition.setDescr(getString("description", JSONWeather));
    weather.currentCondition.setCondition(getString("main", JSONWeather));
    weather.currentCondition.setIcon(getString("icon", JSONWeather));

    JSONObject mainObj = getObject("main", jObj);
    weather.currentCondition.setHumidity(getInt("humidity", mainObj));
    weather.currentCondition.setPressure(getInt("pressure", mainObj));
    weather.temperature.setMaxTemp(getFloat("temp_max", mainObj));
    weather.temperature.setMinTemp(getFloat("temp_min", mainObj));
    weather.temperature.setTemp(getFloat("temp", mainObj));

    // Wind
    JSONObject wObj = getObject("wind", jObj);
    weather.wind.setSpeed(getFloat("speed", wObj));
    weather.wind.setDeg(getFloat("deg", wObj));

    // Clouds
    JSONObject cObj = getObject("clouds", jObj);
    weather.clouds.setPerc(getInt("all", cObj));

    // We download the icon to show


    return weather;
}

关于发生了什么以及我如何解决它的任何想法?

如果您需要查看任何其他代码,请告诉我们。

我真的很感激我能得到的所有帮助(我希望在圣诞节前让它上班,所以我可以把这个应用程序给我父亲作为圣诞礼物...;)

谢谢!!!

0 个答案:

没有答案