这可能看起来很愚蠢和/或简单但我无法做到这一点。
我从数据库(仅)获取数据。我需要同时获得element
和id
。例如,
+----------------+
| id | username |
+----------------+
| 1 | user1 |
| 12 | user2 |
| 103 | user3 |
+----------------+
当我填充ArrayList
或ArrayAdapter
(或其他内容)时,我希望同时获得id
和username
。
我尝试在ArrayList中使用add(int index, String object)
方法,在ArrayAdapter中使用insert(String object, int index)
方法。但是这两种方法都给我带来了同样的错误:
java.lang.IndexOutOfBoundsException:索引12无效,大小为1
我该如何解决这个问题?
感谢。
答案 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");