2016-09-30 3 views
0

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

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

@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» или описания неправдоподобным, как ожидается, купить выборку температуры говорит:

W/System.err: org.json.JSONException: No value for main W/System.err: at org.json.JSONObject.get(JSONObject.java:389) W/System.err: at org.json.JSONObject.getJSONObject(JSONObject.java:609)

Вот отрывок из JSON я получаю, обратите внимание, "LON": ххх, "ш": ххх с целью:

{"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"}] ... 

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

+0

ваш JSON не действителен, пожалуйста, проверьте, является ли это оригинальный JSON или отредактированы для размещения цели, у вас есть широта/долгота определяется как ххх –

+0

JSON является надрез в формате JSON я получить, заметьте «долгота ": xxx," lat ": xxx - это специально. ;-) – Jakob

ответ

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"); 
+0

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

+0

double temp = measurement.getJSONObject («main»). GetDouble (0); попробуйте это –

+0

Это проблема getJSONObject («main»). – Jakob

1

Приведенное ниже сообщение об ошибке.

JSONObject currentTemp = response.getJSONObject ("main");

Главное не на верхнем уровне, так как вы выбираете неправильно.

+0

Строка "double temp = measurement.getJSONObject (" main "). GetDouble (0);" (ошибка: несовместимые типы: строка не может быть преобразована в int). Это getJSONObject («main»), который является проблемой – Jakob

Смежные вопросы