私は自分の天気アプリをAndroidスタジオで開発しようとしています。これまでのところ、私のアプリケーションは正常にAPIに接続し、受け取ったjsonデータを解析します。次に、ListViewとgetViewメソッドを使用して7日間の予測を表示し、毎日とその予測内容を別々の行に表示します。public static Listからの追加データの取得List <>
また、予測データの場所をTextViewに表示しようとしています。だから、私の活動のトップには、それが表示されている予測日数に応じてX行のリストビューが続き、 "ロンドン"と表示されます。
My JSONParserクラスは、各日のデータを含むArrayListを返します。私はforループを使用してJSON配列をループし、予測の各日を取得しています。
私が直面しているわずかな問題は、現在のところ、forループ内のAPI(EG "London")からLocation Stringを取得していることです。これは、X値の代わりにこの値を1回取得するだけでよいため、アレイの長さに応じて時間の
JSONParserクラス:
public class JSONParser {
public static List<ForecastModel> getForecast(String data) {
List<ForecastModel> forecastModelList = new ArrayList<>();
DateFormat dateFormat = DateFormat.getDateInstance();
try {
JSONObject mainObject = new JSONObject(data);
JSONArray jsonArray = mainObject.getJSONArray("data");
ForecastModel location = new ForecastModel();
//set city name
location.setCityName(mainObject.getString("city_name"));
forecastModelList.add(location);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject forecastObject = jsonArray.getJSONObject(i);
ForecastModel forecastModel = new ForecastModel();
forecastModel.setTimeStamp(forecastObject.getString("ts"));
//get city name
forecastModel.setCityName(mainObject.getString("city_name"));
//Format UNIX time stamp
Date forecastDate = new Date((forecastObject.getLong("ts") * 1000L));
String formattedDate = dateFormat.format(forecastDate);
forecastModel.setTimeStamp(formattedDate);
forecastModel.setTemp(forecastObject.getDouble("temp"));
forecastModel.setMaxTemp(forecastObject.getDouble("max_temp"));
forecastModel.setMinTemp(forecastObject.getDouble("min_temp"));
forecastModel.setWindSpeed(forecastObject.getDouble("wind_spd"));
JSONObject weatherObj = forecastObject.getJSONObject("weather");
forecastModel.setCondition(weatherObj.getString("description"));
forecastModelList.add(forecastModel);
}
} catch (JSONException e) {
e.printStackTrace();
}
return forecastModelList;
}
}
アプリは、期待される結果を表示するが、位置がforloopの反復ごとに追加されます。
forloopの外側のリストにlocationオブジェクトを追加しようとしましたが、これはarrayListの0番目の位置に配置され、ListViewの最初の行はnullデータを返します。あなたがForecastModel
のオブジェクトを作成し、唯一の場所に埋めるが、ループ内のオブジェクトのためにあなたがフィールドの残りの部分を充填されているループの前に