首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从ArrayList获取值

无法从ArrayList获取值
EN

Stack Overflow用户
提问于 2015-04-24 11:47:37
回答 3查看 146关注 0票数 1

我有一个ArrayList,它接受一个对象。

Handler.java

代码语言:javascript
复制
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使用这个对象来设置值。

代码语言:javascript
复制
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]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-24 12:21:44

我建议您将第二个代码中的循环替换为以下代码:

代码语言:javascript
复制
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中创建一个新的lao实例。然后,它继续通过counter增加1。所以在这个例子中,counter0,现在它变成了1

在上传到最后一行的代码之后,它将执行laoarray.add(counter, lao);。在这里,位于1的计数器将lao对象添加到位置索引1处的laoarray中,将位置索引0作为null。然后,它重复到ResultSet的末尾。这意味着如果您的rs变量返回10行,它们将被添加到索引110中的laoarray中,而0索引为null。

在初始化System.out.println("laoarray length = "+laoarray.size());变量之后,您可以通过简单的“PageLoader.java”中的laoarray来验证是否正在发生这种情况。

如果这是正确的,那么您可以将方法getAllLinkedInUsersFromDatabase()中的getAllLinkedInUsersFromDatabase()从其当前位置移除,并在laoarray.add(counter, lao);之后设置它,如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-04-24 11:51:16

你是从-1开始的吗?在添加到数组列表之前先做counter++。这意味着第一个条目永远不会被填充。

您可以编辑从索引0开始的代码,或者在for循环中检查老千在处理它之前是否为空。

票数 0
EN

Stack Overflow用户

发布于 2015-04-24 11:53:29

这段代码似乎不完整,但我的猜测是在添加项之前修改计数器,因此,如果您有一个数组,并以counter =0开头,您可以将第一个元素添加到位置1,而位置0仍然为空。

使:

代码语言:javascript
复制
LinkedInAccountObject lao = new LinkedInAccountObject();
.... fill object values ......
laoarray.add(counter, lao);
counter++; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29846721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档