I made a code to make simple weather app. When I try to run my code, the app crashes and returns NULL POINTER EXCEPTION. I know i made some silly mistake leaving initialization. But I couldn't get through where I did. Pl help.The code is below
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");
}
}
}
And the log cat details as follows
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
WeatherHttpClient()).getWeatherData(params[0])- This method directs to the below
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();
}