从sharedpreferences向arraylist添加项时的IndexOutOfBoundsException

时间:2014-04-02 13:12:42

标签: android exception arraylist sharedpreferences indexoutofboundsexception

我的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开始。

有人有解决方案吗?感谢

2 个答案:

答案 0 :(得分:1)

问题是您无法访问index中尚未存在的ArrayList,并且由于Map未被订购,您可能会尝试在索引{{1}处插入在拥有有效的索引10之前,有一个有效的元素索引2或索引0

编辑:

您可以使用

而不是创建一个空的ArrayList
1

然后使用你的循环

答案 1 :(得分:1)

此问题的“解决方法”是在开始添加到特定位置之前,使用全0或其他值预填充列表。例如:

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

添加一个等于您的首选项映射大小的0将基本上将这些位置的所有位置初始化为0.然后您可以返回并按照您的方式添加特定值。

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