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