0

我的arraylist出现了一个小问题,我需要一个解决方法来避免IndexOutOfBoundsException异常。从SharedPreferences向ArrayList添加项目时发生IndexOutOfBoundsException

这里是我如何加入项目:

for(Map.Entry<String,?> entry : getAll().entrySet()){ // this is a map with all my sharedprefs 
     list.add((Integer) entry.getValue(), myItem); 
    } 

我sharedprefs存储在以下方式:

<int name="test0" value="0" /> 
<int name="test1" value="1" /> 
<int name="test2" value="2" /> 

所以我需要根据项目添加到我的ArrayList int值。 问题来,因为SharedPrefereces映射值存储在一个随机的方式,所以当它运行

list.add((Integer) entry.getValue(), myItem); 

它抛出,因为它需要从0

任何人都开始有解决的办法的例外?由于

+0

你在哪里定义'list'。 –

+0

这是一个简单的ArrayList 。它不会扔n!! – iGio90

+0

尝试做'ArrayList arr = new ArrayList ();' –

回答

1

“变通办法”对这个问题是只预填充您的清单,在开始添加到特定位置之前,所有0或某个其他值。例如:

int mapSize = mPrefMap.size(); 
for(int i = 0; i < mapSize; i++){ 
    listOfStuff.add(0); 
} 

添加一些0等于你的喜好地图在这些地点将主要初始化所有位置为0。然后,您可以回去,并添加特定的值,你正在做的方式的大小。

我仍然困惑你为什么不只是使用标准SharedPreference类。这将避免需要此解决方法,并为您节省浪费的时间,以便为ArrayList设置默认值。

1

问题是,你不能访问不ArrayList还不存在的index,由于Map没有下令你可能想在指数1插入之前有0或指数2之前有效的元素索引具有有效索引01

编辑:

而不是创建一个空的ArrayList,您可以使用

ArrayList<String> arr = new ArrayList<String>(getAll().entrySet()); 

,然后用你的循环

+0

这正是问题所在,它试图在“0”之前添加“1” – iGio90

相关问题