Java 正在引发wNULL指针异常

Java 正在引发wNULL指针异常,java,android,sdk,Java,Android,Sdk,我做了一个代码来制作简单的天气应用程序。当我尝试运行代码时,应用程序崩溃并返回空指针异常。我知道我在离开时犯了一些愚蠢的错误。但我没能通过我去的地方。Pl帮助。代码如下所示 public class MainActivity extends Activity { TextView cityText; TextView temp; @Override protected void onCreate(Bundle savedInstanceState) {

我做了一个代码来制作简单的天气应用程序。当我尝试运行代码时,应用程序崩溃并返回空指针异常。我知道我在离开时犯了一些愚蠢的错误。但我没能通过我去的地方。Pl帮助。代码如下所示

public class MainActivity extends Activity {
    TextView cityText;
    TextView temp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String city = "London,UK";
        cityText = (TextView) findViewById(R.id.cityText);
        temp = (TextView) findViewById(R.id.temp);
        JSONWeatherTask task = new JSONWeatherTask();
        task.execute(new String[] { city });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private class JSONWeatherTask extends AsyncTask<String, Void, Weather> {
        @Override
        protected Weather doInBackground(String... params) {
            Weather weather = new Weather();
            String data = ((new WeatherHttpClient()).getWeatherData(params[0]));
            try {
                weather = JSONWeatherParser.getWeather(data);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return weather;
        }

        @Override
        protected void onPostExecute(Weather weather) {
            super.onPostExecute(weather);
            cityText.setText(weather.location.getCity() + "," + weather.location.getCountry());
            temp.setText("" + Math.round((weather.temperature.getTemp() - 273.15)) + "�C");
        }
    }
}

Stacktrace,谢谢。从((new WeatherHttpClient()).getWeatherData(params[0]))返回的数据似乎有问题;也许你应该看看这个方法返回了什么,用上面提到的方法更新这个问题。我不觉得有什么奇怪的。可以吗?请发布类JSONWeatherParser的getWeather,NPE发生在那里。谢谢
    05-23 23:43:24.741: E/AndroidRuntime(804): FATAL EXCEPTION: AsyncTask #1
    05-23 23:43:24.741: E/AndroidRuntime(804): java.lang.RuntimeException: An error                 occured while executing doInBackground()
    05-23 23:43:24.741: E/AndroidRuntime(804):  at android.os.AsyncTask$3.done(AsyncTask.java:299)
    05-23 23:43:24.741: E/AndroidRuntime(804):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    05-23 23:43:24.741: E/AndroidRuntime(804):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    05-23 23:43:24.741: E/AndroidRuntime(804):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
   05-23 23:43:24.741: E/AndroidRuntime(804):   at java.util.concurrent.FutureTask.run(FutureTask.java:137)
   05-23 23:43:24.741: E/AndroidRuntime(804):   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at java.lang.Thread.run(Thread.java:856)
  05-23 23:43:24.741: E/AndroidRuntime(804): Caused by: java.lang.NullPointerException
  05-23 23:43:24.741: E/AndroidRuntime(804):    at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at org.json.JSONTokener.nextValue(JSONTokener.java:94)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at org.json.JSONObject.<init>(JSONObject.java:154)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at org.json.JSONObject.<init>(JSONObject.java:171)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at com.survivingwithandroid.weatherapp.JSONWeatherParser.getWeather(JSONWeatherParser.java:17)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at com.survivingwithandroid.weatherapp.MainActivity$JSONWeatherTask.doInBackground(MainActivity.java:51)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at com.survivingwithandroid.weatherapp.MainActivity$JSONWeatherTask.doInBackground(MainActivity.java:1)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
  05-23 23:43:24.741: E/AndroidRuntime(804):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
  05-23 23:43:24.741: E/AndroidRuntime(804):    ... 5 more
    public String getWeatherData(String location) {
    HttpURLConnection con = null ;
    InputStream is = null;

    try {
        con = (HttpURLConnection) ( new URL(BASE_URL + location)).openConnection();
        con.setRequestMethod("GET");
        con.setDoInput(true);
        con.setDoOutput(true);
        con.connect();

        // Let's read the response
        StringBuffer buffer = new StringBuffer();
        is = con.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while (  (line = br.readLine()) != null )
            buffer.append(line + "\r\n");

        is.close();
        con.disconnect();
        return buffer.toString();
    }