###前提・実現したいこと
自作APIからデータを取得し、その内容を入れ子Listに入れる処理を記述しています。
以下はそのリスト定義です。
java
1class Hoge{ 2 private int mParam; 3 private String mField; 4 //コンストラクタなど以下略 5} 6 7//Hoge型のクラスを持つFugaクラス 8class Fuga{ 9 private int mId; 10 private String mName; 11 private List<Hoge> mList; 12 13 //コンストラクタなど中略 14 public List<Hoge> getList(){ 15 return this.mList; 16 } 17 18 //以下略 19} 20 21//上記クラスを使ってListを定義したActivity 22public class HomeActivity extends AppCompatActivity{ 23 //中略 24 final List<Fuga> fugaList = new ArrayList<>(); 25 //以下略 26}
###発生している問題・エラーメッセージ
入れ子Listの中身が共通になり、参照しても同じデータが表示され、削除すると共通して削除され、何も残らなくなってしまいます。
もう少し具体的に申しますと、変数listに対してインデックスを指定してget()メソッドを実行しても、どのインデックスでもlist.get(index).getList()で同じ内容が表示されてしまいます。
Hoge・Fugaクラスでコンストラクタ、ゲッター・セッターは実装しておりますが、うまく行きません。
###該当のソースコード
このソースコードはActivityの中に実装されており、バックグラウンド処理される部分です。
今回質問させていただいた内容で関連のある部分のみを、一部変更して抜粋しております。
java
1//fugaListは、Activityのフィールドで以下のように定義しています 2final List<Fuga> fugaList = new ArrayList<>(); 3 4private void addDataToList(JSONObject object) { 5 6 String name,field; 7 int id,param; 8 9 try { 10 //WebAPIから取得したJSONデータをパースし、Listに格納する 11 JSONArray jsonArray = object.getJSONArray("history"); 12 for(int i = 0; i < jsonArray.length() ;i++) { 13 List<Hoge> hogeList = new ArrayList<>(); 14 JSONObject temp = (JSONObject) jsonArray.get(i); 15 name = temp.getString("name"); 16 idd = Integer.parseInt(temp.getString("machine")); 17 18 JSONArray jsonMeasureArray = temp.getJSONArray("measures"); 19 20 for(int j = 0; j < jsonMeasureArray.length(); j++){ 21 JSONObject w = (JSONObject) jsonMeasureArray.get(j); 22 param = Integer.parseInt(w.getString("param")); 23 field = String.valueOf(w.getString("field")); 24 hogeList.add(new Hoge(param,field)); 25 }//for 26 27 fugaList.add(new Huga(id,name,hogeList)); 28 }//for 29 }//try 30 //以下略 31 32}//adddataToList
###試したこと
リストのスコープをメソッド内に変更したり、set()で上書きしたり、clear()で初期化してもうまく行きません。
###補足情報
コンパイラ:Java 8
JVM実行環境:Android 5.0.1 Nexus 7
開発OS:Windows 10
IDE:Android Studio 3.0
初歩的な質問のことと思いますが、ご回答いただければ幸いです。よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/30 06:33