我有一个带对象的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。因此,在这种情况下,counter0,现在它变成了1

在最后一行中执行完所有上传的代码后,它将执行laoarray.add(counter, lao);。在这里,计数器为1会将lao对象添加到位置索引为1的laoarray上,而位置索引0为null。然后重复直到ResultSet的结尾。这意味着,如果您的rs变量返回10行,则会将它们添加到laoarray中从110的索引中,而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

09-11 03:22