我有一个带对象的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()
循环遍历。现在,如果这是正确的,则当存储第一个数据时,您的方法将在LinkedInAccountObject
中创建lao
的新实例。然后继续以counter
递增1
。因此,在这种情况下,counter
是0
,现在它变成了1
。在最后一行中执行完所有上传的代码后,它将执行
laoarray.add(counter, lao);
。在这里,计数器为1会将lao
对象添加到位置索引为1的laoarray
上,而位置索引0为null
。然后重复直到ResultSet
的结尾。这意味着,如果您的rs
变量返回10行,则会将它们添加到laoarray
中从1
到10
的索引中,而0
索引为null。初始化
System.out.println("laoarray length = "+laoarray.size());
变量后,只需在'PageLoader.java'中使用laoarray
即可验证是否正在发生这种情况。如果正确,则可以从方法
counter++;
的当前位置删除getAllLinkedInUsersFromDatabase()
并将其设置在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