我的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" />
所以我需要根据int值将项添加到我的arraylist中。 问题来自于SharedPrefereces map以随机方式存储值,因此当它运行时
list.add((Integer) entry.getValue(), myItem);
它抛出异常,因为它需要从0开始。
有人有解决方案吗?感谢
答案 0 :(得分:1)
问题是您无法访问index
中尚未存在的ArrayList
,并且由于Map
未被订购,您可能会尝试在索引{{1}处插入在拥有有效的索引1
和0
之前,有一个有效的元素索引2
或索引0
。
编辑:
您可以使用
而不是创建一个空的ArrayList1
然后使用你的循环
答案 1 :(得分:1)
此问题的“解决方法”是在开始添加到特定位置之前,使用全0或其他值预填充列表。例如:
int mapSize = mPrefMap.size();
for(int i = 0; i < mapSize; i++){
listOfStuff.add(0);
}
添加一个等于您的首选项映射大小的0将基本上将这些位置的所有位置初始化为0.然后您可以返回并按照您的方式添加特定值。
我仍然感到困惑,为什么你不只是使用标准SharedPreference
类。这样可以避免需要这种解决方法,并节省您必须为ArrayList
设置默认值所浪费的时间。