2017-11-23 9 views
0

私は自分の天気アプリを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のオブジェクトを作成し、唯一の場所に埋めるが、ループ内のオブジェクトのためにあなたがフィールドの残りの部分を充填されているループの前に

Inside for Loop Outside for loop

答えて

0

これはおそらく、最初の位置からヌル値を取得する理由です。

ビューを表示するのに必要なすべての値を最初のオブジェクトに正しく入力することができます。

リストに別のタイプを作成するか、都市名を示すラベルだけのヘッダーにします。 Like here

関連する問題