2016-09-30 8 views
0

私は自分の街の現在の気温を読みたいAndroidアプリを作成しています。私はhttp://openweathermap.org/current無料のAPIを使用しています。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" を注意してください:XXX、 "緯度":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"}] ... 

フェッチで何が間違っていますか?

+0

あなたのJSONは、確認してください、これはオリジナルのJSON有効でない場合、またはあなたが目的を掲示するために編集され、あなたは、XXX –

+0

として定義緯度/経度は、JSONは私が受け取るJSONのスニップであることに注意してい「LON ":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 = measurements.getJSONObject( "main")。getDouble( "temp"); これは無効です: "エラー:(92,78)エラー:互換性のない型:文字列をint型に変換できません" – Jakob

+0

double temp = measurements.getJSONObject( "main")。getDouble(0);これを試してください –

+0

問題はgetJSONObject( "main")です。 – Jakob

1

以下は、エラーを示しています。

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

メインはトップレベルではありません。フェッチする方法は間違っています。

+0

行 "double temp = measurements.getJSONObject(" main ")。getDouble(0);"有効ではありません(エラー:互換性のない型:文字列をintに変換できません)。これは問題のgetJSONObject( "main")です。 – Jakob

関連する問題