編集:間違ったオブジェクトからフロートを取得していました-悪いです。ただし、タイムスタンプに同じ問題があります-IntはJSONObjectに変換できません
openweathermap から都市と国を取得していますが、フロート値でアプリがクラッシュします。私はAndroidに非常に慣れておらず、JSONを初めて使用するので、助けていただければ幸いです。私は7日間の天気予報を読んでいます。これは私の WeatherParser クラスで、テキスト ビューから都市の位置が渡されます。
JSONObject jObj = new JSONObject(data);
JSONObject city = jObj.getJSONObject("city");
Location loc = new Location();
loc.setCity(getString("name", city));
loc.setCountry(getString("country", city));
weather.setLocation(loc);
JSONArray jArr = jObj.getJSONArray("list");
for (int i = 0; i < jArr.length(); i++) {
JSONObject dailyForecast = jArr.getJSONObject(i);
JSONObject time = dailyForecast.getJSONObject("dt");
JSONObject temp = dailyForecast.getJSONObject("temp");
JSONObject dayTemp = temp.getJSONObject("day");
JSONObject max = temp.getJSONObject("max");
JSONObject min = temp.getJSONObject("min");
DailyForecast df = new DailyForecast();
long unixSeconds = (long) getLong("dt", time);
Date date = new Date(unixSeconds*1000L); // *1000 is to convert minutes to milliseconds
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
String formattedDate = sdf.format(date);
df.setDay(formattedDate);
df.setTemp(getFloat("day", dayTemp));
df.setMax(getFloat("max", max));
df.setMin(getFloat("min", min));
JSONArray jAr = dailyForecast.getJSONArray("weather");
if(jAr.length() > 2) {
JSONObject desc = jAr.getJSONObject(2); //get the 3rd item
df.setDesc(getString("description", desc));
}
weeksForecast[i] = df;
}
weather.fillForecast(weeksForecast);
return weather;
}
private static String getString(String tagName, JSONObject jObj)
throws JSONException {
return jObj.getString(tagName);
}
private static float getFloat(String tagName, JSONObject jObj)
throws JSONException {
return (float) jObj.getDouble(tagName);
}
private static float getLong(String tagName, JSONObject jObj)
throws JSONException {
return (long) jObj.getDouble(tagName);
}
}
10-24 19:48:03.728: D/gralloc_goldfish(954): GPU エミュレーションなしのエミュレーターが検出されました。10-24 19:48:12.398: D/dalvikvm(954): GC_FOR_ALLOC は 163K を解放し、9% は 2855K/3136K を解放し、36ms を一時停止し、合計 36ms 10-24 19:48:12.448: W/System.err(954): org.json.JSONException: タイプ java.lang.Double の日の値 12.74 は JSONObject 10-24 19:48:12.448: W/System.err(954): org.json.JSON.typeMismatch(JSON) に変換できません.java:100) 10-24 19:48:12.448: W/System.err(954): org.json.JSONObject.getJSONObject(JSONObject.java:577) 10-24 19:48:12.448: W/システム.err(954): com.meaProject.yawa.WeatherParser.getWeather(WeatherParser.java:31) 10-24 19:48:12.448: W/System.err(954): com.meaProject.yawa.MainActivity$ でJSONWeatherTask.doInBackground (MainActivity.java:58) 10-24 19:48:12.458: W/System.err (954): com.meaProject.yawa.MainActivity$JSONWeatherTask で。