我有一个带有对象的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"));
}
但我无法使用老挝对象获取细节,获得空指针。
当我打印老挝对象时,它给出如下结果,
数组对象[null,LinkedInAccountObject [accountId = xxx, parentId = xx,expiresOn = xxx]]
答案 0 :(得分:1)
我建议您使用以下代码替换第二个代码中的循环:
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
,System.out.println("laoarray length = "+laoarray.size());
索引为空。
初始化laoarray
变量后,您可以在“PageLoader.java”中通过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
之后,如下所示:
numberOfLines
答案 1 :(得分:0)
你的反击是从-1开始吗?在添加到arraylist之前,你会使用++。 这意味着第一个条目永远不会被填充。
您可以编辑代码以从索引0开始,或者在for循环中检查老虎机是否在归属之前是否为空。
答案 2 :(得分:0)
此代码似乎不完整,但我的猜测是你在添加项目之前修改计数器,所以如果你有一个数组并以counter = 0开头,你将第一个元素添加到位置1,位置0保持为空。
成功:
LinkedInAccountObject lao = new LinkedInAccountObject();
.... fill object values ......
laoarray.add(counter, lao);
counter++;