2015-08-08 64 views
1

这可能看起来很愚蠢和/或容易的问题,但我无法做到这一点。将元素添加到ArrayList或ArrayAdapter中的特定索引

我从数据库(仅)获取数据。我需要同时获得element及其id。例如,

+----------------+ 
| 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: Invalid index 12, size is 1

我怎样才能解决这个问题?

谢谢。

+0

你能张贴代码? – Preethi

+0

我加了一个答案,还有别的? – Andrew

回答

1

您使用了不存在的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)); 
} 

UPDATE:

如果你需要一个结构 “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,如果密钥不存在。

+0

谢谢。但是如果只有3条记录,那么它不会添加元素? 我试过了,但没有解决我的问题。 对不起,延迟回复... –

+0

@MirjalalTalishinski,对于这些目标使用'map' – Andrew

+0

@MirjalalTalishinski,我更新了 – Andrew

0

您得到的原因ArrayIndexOutOfBound的例外是您首先在索引1中插入1。 但直接试图插入12。 但在当时列表的大小只有1

我建议,可以用HashMap ..您存储ID作为密钥和用户名作为值 即

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