Выборка температуры из JSON

#java #android #json

#java #Android #json

Вопрос:

Я создаю приложение для Android, в котором я хочу узнать текущую температуру в моем городе. Я использую http://openweathermap.org/current бесплатный API.

Теперь, когда я пытаюсь получить температуру, выполнив следующие действия:

 @Override
    public void onResponse(JSONObject response) {

        try {

            Log.d("MY LOGGER: ", "Task started");

            //Fetch description
            JSONArray measurements = response.getJSONArray("list");
            String desc = measurements.getJSONObject(0).getJSONArray("weather").getJSONObject(0).getString("description");

            //Fetch temp
            JSONObject currentTemp = response.getJSONObject("main");
            double temp = currentTemp.getDouble("temp");
            .
            .
  

«desc» или описание извлекается, как и ожидалось, buy выборка температуры говорит:

W / System.err: org.json.JSONException: нет значения для main W / System.err: в org.json.JSONObject.get(JSONObject.java:389) W / System.err: в org.json.JSONObject.getJSONObject(JSONObject.java:609)

Вот фрагмент JSON, который я получаю, обратите внимание, что «lon»: xxx, «lat»: xxx специально:

 {"city":{"id":2624652,"name":"Arhus","coord":{"lon":xxx,"lat":xxx},"country":"DK","population":0,"sys":{"population":0}},"cod":"200","message":0.0028,"cnt":40,"list":[{"dt":1475269200,"main":{"temp":284.9,"temp_min":284.897,"temp_max":284.9,"pressure":1017.03,"sea_level":1020.8,"grnd_level":1017.03,"humidity":79,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}],"clouds":{"all":48},"wind":{"speed":6.75,"deg":247.005},"rain":{"3h":0.04},"sys":{"pod":"n"},"dt_txt":"2016-09-30 21:00:00"},{"dt":1475280000,"main":{"temp":284.21,"temp_min":284.205,"temp_max":284.21,"pressure":1017.5,"sea_level":1021.27,"grnd_level":1017.5,"humidity":87,"temp_kf":0},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}] ...
  

Что я делаю не так при выборке?

Комментарии:

1. ваш JSON недействителен, пожалуйста, проверьте, является ли это оригинальным JSON или вы отредактировали его для целей публикации, у вас lat / lon определен как xxx

2. JSON — это фрагмент JSON, который я получаю, обратите внимание, что «lon»: xxx, «lat»: xxx специально. 😉

Ответ №1:

ОБНОВЛЕНО

Попробуйте извлечь его таким образом.

        JSONArray measurements = response.getJSONArray("list");
                 //description                
                String desc = measurements.getJSONObject(0).getJSONArray("weather").getJSONObject(0).getString("description");
                //temperature
                double temp = measurements.getJSONObject(0).getJSONObject("main").getDouble("temp");
  

Комментарии:

1. double temp = measurements.getJSONObject(«main»).getDouble(«temp»); Это неверно, в нем говорится: «Ошибка: (92, 78) ошибка: несовместимые типы: строка не может быть преобразована в int»

2. двойная температура = измерения.getJSONObject(«main»).getDouble(0); попробуйте это

3. Проблема заключается в getJSONObject(«main»).

Ответ №2:

Следующее выдает ошибку.

JSONObject currentTemp = response.getJSONObject(«main»);

main не находится на верхнем уровне, способ выборки неверен.

Комментарии:

1. Строка «double temp = measurements.getJSONObject(«main»).getDouble(0);» недопустима (ошибка: несовместимые типы: строка не может быть преобразована в int). Проблема заключается в getJSONObject(«main»)