2017-01-27 3 views
-4

である私はエラー: - java.lang.IndexOutOfBoundsException:メイン<br> プロセス::com.bss.client.righterapplication無効なインデックス8、サイズはコードの下のために8

致命的な例外を取得しています、PID:20516
java.lang.IndexOutOfBoundsException:無効なインデックス8、サイズは私がリストから "None" を削除していないする必要が8

です。

private void createNameList(){ 

     arrayListTagNames.clear(); 
     int i=0; 
     ArrayList<Integer> remArray=new ArrayList<>(); 
     for (TagClass name : arrayListTags){ 
      if (!name.getName().equals("None")) 
       arrayListTagNames.add(name.getName()); 

      else 
       remArray.add(i); 
      i++; 
     } 
     Log.d("arrays0", arrayListTags.toString()); 
     Log.d("arrays0", String.valueOf(arrayListTags.size())); 
     Log.d("arrays1", arrayListTagNames.toString()); 
     Log.d("arrays2", remArray.toString()); 
     Log.d("arraySize1 ", String.valueOf(arrayListTagNames.size())); 
     Log.d("arraySize2 ", String.valueOf(remArray.size())); 
     //arrayListTags.removeAll(remArray); 
     // arrayListTags.removeAll(remArray); 

      for (int index : remArray){ 

      arrayListTags.remove(index); 

       Log.d("indexarraylist", arrayListTags.toString()); 
      } 
     Log.d("array ALT ", arrayListTags.toString()); 
    } 
+0

arrayListTags?それは何ですか? –

答えて

1

と仮定arrayListTagsサイズは5で、「なし」は、インデックス3とインデックス5 ではありません今、あなたはので、あなたのarrayListTagsサイズは4であり、あなたのインデックス5が現在のインデックス4であるインデックス3を削除あなたはインデックス5の価値を取り除き、インデックスを提供しようとしています。 試し

// Get an iterator. 
    Iterator<TagClass> ite = arrayListTags.iterator(); 
    while (ite.hasNext()) { 
     TagClass value = ite.next(); 
     if (value.getName().equalsIgnoreCase("None")) 
      ite.remove(); 


    } 
} 

arrayListTagsが変更されますと 名前がNoneどこ除く値を持つことになります。

+0

ヘルプのおかげでチャンス – user3633153

0

それぞれの代わりに通常のforループを使用する必要があります。

をそれぞれに置き換えます。

for (int i = 0 : i < arrayListTags.size() : i++) 
{ 
    if (!name.getName().equals("None")) 
     arrayListTagNames.add(name.getName()); 

    else 
     remArray.add(i); 
} 
0

ここであなたはそれが配列IndexOutOfBoundEceptionを与えているように、より多くまたは削除インデックス位置に等しくないarraylistTagsの大きさをチェックされていないため、問題はあなたのarrayListTags.remove(index);コードです。ただ、このコードはそれをチェックアウト:

private void createNameList() { 
    if(arrayListTagNames==null){ 
     arrayListTagNames = new ArrayList<>(); 
    } 
    arrayListTagNames.clear(); 

    int i = 0; 
    ArrayList<Integer> remArray = new ArrayList<>(); 
    for (TagClass name : arrayListTags) { 
     if (!name.getName().equals("None")) { 
      arrayListTagNames.add(name.getName()); 
     } else { 
      remArray.add(i); 
     } 
     i++; 
    } 

    if (arrayListTags != null && arrayListTags.size() > 0) { 
     Log.d("arrays0", arrayListTags.toString()); 
     Log.d("arrays0", String.valueOf(arrayListTags.size())); 
    } 

    if (arrayListTagNames != null && arrayListTagNames.size() > 0) { 
     Log.d("arrays1", arrayListTagNames.toString()); 
     Log.d("arraySize1 ", String.valueOf(arrayListTagNames.size())); 
    } 

    if (remArray != null && remArray.size() > 0) { 
     Log.d("arrays2", remArray.toString()); 
     Log.d("arraySize2 ", String.valueOf(remArray.size())); 
    } 

    for (int index : remArray) { 
     //Remove index if that is available for arrayListTag list 
     if(index<arrayListTags.size()) { 
      arrayListTags.remove(index); 
     } 

     if (arrayListTags != null && arrayListTags.size() > 0) { 
      Log.d("indexarraylist", arrayListTags.toString()); 
     } 
    } 

    if (arrayListTags != null && arrayListTags.size() > 0) { 
     Log.d("array ALT ", arrayListTags.toString()); 
    } 
} 
関連する問題