0

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();
    }
ARN
  • 175
  • 1
  • 1
  • 13
  • 3
    Stacktrace, please. http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this – laalto May 23 '14 at 18:25
  • Looks like there is something wrong with the data you get back from ((new WeatherHttpClient()).getWeatherData(params[0])); maybe you should take a look at what the method is returning – wastl May 23 '14 at 18:37
  • Updated the question with the mentioned method. I don't find anything ODD. Can u? – ARN May 23 '14 at 18:50
  • Please post getWeather of class JSONWeatherParser, the NPE happens in there. Thanks. – fasteque May 23 '14 at 20:16

0 Answers0