![](/img/trans.png)
[英]Unable to get values from a hashmap which uses a arraylist as value is cleared
[英]Unable to get values from ArrayList
我有一个带对象的ArrayList。
Handler.java
public ArrayList<LinkedInAccountObject> getAllLinkedInUsersFromDatabase(){
LinkedInAccountObject lao = new LinkedInAccountObject();
counter++;
lao.setAccountId(rs.getLong("account_id"));
lao.setLinkedInAccountId(rs.getString("linkedin_account_id"));
lao.setParentId(rs.getLong("parent_id"));
lao.setFirstName(rs.getString("first_name"));
lao.setLinkedInAccountId(rs.getString("linkedin_account_id"));
lao.setEmail(rs.getString("email"));
lao.setAccessToken(rs.getString("access_token"));
lao.setExpiresOn(rs.getLong("expires_on"));
laoarray.add(counter, lao);
}
我的PageLoader.java
使用此对象设置值
ArrayList<LinkedInAccountObject> laoarray = lndb.getAllLinkedInUsersFromDatabase();
for (LinkedInAccountObject lao : laoarray) {
LinkedInPageObject lpo = new LinkedInPageObject();
lpo.setCompanyID(lao.getParentId());
lpo.setComment(lao.getComment());
//lpo.setDescription(obj.getString("description"));
//lpo.setTitle(obj.getString("title"));
}
但是我无法使用lao对象获取详细信息,从而获得了空指针。
当我打印老挝对象时,它给出如下结果,
数组对象[null,LinkedInAccountObject [accountId = xxx,parentId = xx,expiresOn = xxx]]
我建议您将第二个代码中的循环替换为以下内容:
Iterator<LinkedInAccountObject> iterator = laoarray.iterator();
while(iterator.hasNext()){
LinkedInAccountObject lao = iterator.next()
LinkedInPageObject lpo = new LinkedInPageObject();
lpo.setCompanyID(lao.getParentId());
lpo.setComment(lao.getComment());
//remaining of your code.
}
编辑
从这里发布的所有评论中,我觉得您已经将counter
变量初始化为0
。 在您的方法getAllLinkedInUsersFromDatabase()
您正在使用rs.hasNext()
遍历一个循环。 现在,如果这是正确的话,那么当存储第一个数据时,您的方法将在lao
创建一个LinkedInAccountObject
的新实例。 然后继续将counter
加1
。 因此,在这种情况下, counter
现在为0
因此变为1
。
在上一行执行laoarray.add(counter, lao);
所有上传的代码之后,它会执行laoarray.add(counter, lao);
。 这里counter为1会将lao
对象添加到位置索引为1的laoarray
上,位置索引0为null
。 然后重复直到ResultSet
的结尾。 这意味着,如果您的rs
变量返回10行,则会将它们添加到索引1
到10
laoarray
中,其中0
index为空。
您可以通过System.out.println("laoarray length = "+laoarray.size());
来验证是否正在发生这种情况System.out.println("laoarray length = "+laoarray.size());
初始化laoarray
变量后,在“ PageLoader.java”中laoarray
。
如果正确,那么您可以删除counter++;
在方法getAllLinkedInUsersFromDatabase()
中从其当前位置开始,并在laoarray.add(counter, lao);
之后进行设置laoarray.add(counter, lao);
如下所示:
LinkedInAccountObject lao = new LinkedInAccountObject();
//counter++; remove it from here.
lao.setAccountId(rs.getLong("account_id"));
lao.setLinkedInAccountId(rs.getString("linkedin_account_id"));
lao.setParentId(rs.getLong("parent_id"));
lao.setFirstName(rs.getString("first_name"));
lao.setLinkedInAccountId(rs.getString("linkedin_account_id"));
lao.setEmail(rs.getString("email"));
lao.setAccessToken(rs.getString("access_token"));
lao.setExpiresOn(rs.getLong("expires_on"));
laoarray.add(counter, lao);
counter++;//place it here
您是否从-1开始计数? 在添加到arraylist之前,您需要先进行counter ++操作。 这意味着第一个条目永远不会被填充。
您可以编辑代码以从索引0开始,或者在for循环中检查老挝在处理之前是否不为null。
这段代码似乎并不完整,但是我猜想是在添加项目之前先修改计数器,所以如果您有一个数组并以counter = 0开头,则将第一个元素添加到位置1,位置0保持为空。
做了:
LinkedInAccountObject lao = new LinkedInAccountObject();
.... fill object values ......
laoarray.add(counter, lao);
counter++;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.