2016-08-26 20 views
2

別のarraylistを含むためにarraylistを作成しようとしましたが、ループが最初のラウンドで親にサブアレイリストを追加した後、以前に追加された行を上書きし、2ラウンドの値を複製します。最終的に私は、カーソルの最後の行に値を持つ重複行を持つarraylistを取得します。うまくそれを明確にするために...代わりにこの別のArrayListを含むArrayList <ArrayList <String>>を埋め込む方法<String>

 [Quote1, Location1] 
     [Quote2, Location2] 
     [Quote3, Location3] 
     [Quote4, Location4] 

のようなものを返すので、それはここで

 [Quote4, Location4] 
     [Quote4, Location4] 
     [Quote4, Location4] 
     [Quote4, Location4] 

のようなものを返す私のコードです:

public ArrayList<ArrayList<String>> getAllVerses() { 
    ArrayList<ArrayList<String>> allVersesAL = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> subAL = new ArrayList<>(); 
    Cursor allVerse = getAllQuote(); //It's an outsider method 
    allVerse.moveToFirst(); 
    do { 
     //subAL.clear(); 
     subAL.add(allVerse.getString(allVerse.getColumnIndex(VERSE))); 
     subAL.add(allVerse.getString(allVerse.getColumnIndex(LOC_AUTH))); 
     Log.d("Content of subAL", subAL + ""); 
     allVersesAL.add(subAL); 
    } while (allVerse.moveToNext()); 

    for (List<String> li : allVersesAL) { 
     for (String s : li) { 
      Log.d("getAllVerses", "Inside the second for loop..."); 
      Log.d("Testing arraylist...", s + " : "); 
     } 
    } 
    return allVersesAL; 
} 

それはサブにデータを代入しますカーソルオブジェクトからのArrayList助けてください!!!私はこれに多くの時間を費やしましたが、私のコードで何が間違っているのか理解できませんでした。皆さんを祝福してください!

+1

囲みリスト「allVersesAL」に対して、同じリスト 'subAl'に多くの参照を追加しているようです。その代わりに、毎回新しいインナーリストを作成してください。 – khelwood

+1

このコードのコメントを外す: '//subAL.clear();'はおそらくあなたの問題を解決するでしょう –

+1

@ShaishavJoganiいいえ、そうではありません。彼が行う場合、リストにはカーソルの最後の行のデータしか含まれません。 –

答えて

3

内を移動ArrayList<String> subAL = new ArrayList<>();あなたが実際のオブジェクトがリストに挿入されListにオブジェクトを挿入します。コピーされません。同じオブジェクトに対してさらに操作を行うと、リストに格納されているオブジェクトに影響します。

あなたの行う必要があることは、あなたの人口コードの外側ループの反復ごとに新しいArrayListオブジェクトを作成することです。

do { 
    //subAL.clear(); 
    subAl = new ArrayList<String>(); 
+0

ありがとうございました!!!何が起こったのか把握するのに半日以上かかった... Verrrrrrrry helpful – Sammie

1

do whileループ

+1

ありがとうございます。それは多くの助けになりました! – Sammie

+0

@Sammie答えが受け入れられたら投票してください。ありがとう! –

関連する問題