将元素添加到ArrayList或ArrayAdapter中的特定索引

时间:2015-08-08 18:51:50

标签: java android arraylist

这可能看起来很愚蠢和/或简单但我无法做到这一点。

我从数据库(仅)获取数据。我需要同时获得elementid。例如,

+----------------+
|  id | username |
+----------------+
| 1   | user1    |
| 12  | user2    |
| 103 | user3    |
+----------------+

当我填充ArrayListArrayAdapter(或其他内容)时,我希望同时获得idusername

我尝试在ArrayList中使用add(int index, String object)方法,在ArrayAdapter中使用insert(String object, int index)方法。但是这两种方法都给我带来了同样的错误:

  

java.lang.IndexOutOfBoundsException:索引12无效,大小为1

我该如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:2)

您使用了12索引,该索引不存在。如果要在末尾添加元素,可以使用此签名:

objectOfArrayList.add(strigObject); // add an element to end

并且,您必须始终检查数组的大小:

int index = 16;
if (objectOfArrayList.size() > index) {
    objectOfArrayList.add(index -1, stringObject); // add an element to position
}

已执行检查以向ArrayList的对象添加或插入值:

private void rangeCheckForAdd(int index) {
    if (index > size || index < 0)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

<强>更新

如果您需要结构“key - value”(Vitaliy Tsvayer提出的想法),您将使用地图:

// id - user
LinkedHashMap<Integer, String> map = new LinkedHashMap<>();
map.put(1, "user1");
map.put(12, "user2");
map.put(103, "user3");

在评论中回答问题:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("user", 1);
int id = map.get("user");
System.out.println("id = " + id); // "id = 1"

如果密钥不存在,最后一个示例中可能会出现java.lang.NullPointerException

答案 1 :(得分:0)

您获得ArrayIndexOutOfBound异常的原因是您首先在索引1中插入1。 但随后直接尝试插入12。 但那时列表的大小只有1

我的建议,请使用HashMap .. 你将id作为密钥和用户名存储为值,即

Map<String, String> = new HashMap <String, String>();
map.put('1', "name 1");