0
1

Написал код для приложения всё один в один ( задание 9.6) После ввода города и нажатия на кнопку приложение ломает, пишет : 

2020-05-09 16:35:50.975 11559-11559/com.hfad.weatherapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.hfad.weatherapp, PID: 11559
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:121)
at org.json.JSONTokener.nextValue(JSONTokener.java:98)
at org.json.JSONObject.<init>(JSONObject.java:164)
at org.json.JSONObject.<init>(JSONObject.java:181)
at com.hfad.weatherapp.MainActivity$DownloadWeatherTask.onPostExecute(MainActivity.java:83)
at com.hfad.weatherapp.MainActivity$DownloadWeatherTask.onPostExecute(MainActivity.java:47)
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7860)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)


Юрий Маняхин
4 years ago






Решение пока не найдено? У меня такая же ошибка, "Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference" возникла в задании 9.5.

Я закомментировал обращение к строке "JSONObject jsonObject = new JSONObject(s);", в которой получил сообщение об ошибке и вывел проблемное значение-аргумент, "2020-05-28 14:26:11.975 4900-4900/com.demo.downloadjson I/MyResult: s= null"

вот код:

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);

Log.i("MyResult", "s= " + s);
return;

/*
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray jsonArray = jsonObject.getJSONArray("weather");
JSONObject weather = jsonArray.getJSONObject(0);
String main = weather.getString("main");
String description = weather.getString("description");
Log.i("MyResult", main + " " + description);
} catch (JSONException e) {
e.printStackTrace();
}
*/
}

Скорее всего дело в том, что в результате запроса
https://openweathermap.org/data/2.5/weather?q=Краснодар&appid=b6907d289e10d714a6e88b30761fae22

возвращается строка которая не является валидным джейсоном, то есть надо зарегистрироваться на погоде и поменять ключ в приложении:
{"cod": 401,"message": "Invalid API key. Please see http://openweathermap.org/faq#error401 for more info."}

Федор Космачев
4 years ago

Один ответ