我有一个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]
发布于 2015-04-24 12:21:44
我建议您将第二个代码中的循环替换为以下代码:
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。所以在这个例子中,counter是0,现在它变成了1。
在上传到最后一行的代码之后,它将执行laoarray.add(counter, lao);。在这里,位于1的计数器将lao对象添加到位置索引1处的laoarray中,将位置索引0作为null。然后,它重复到ResultSet的末尾。这意味着如果您的rs变量返回10行,它们将被添加到索引1到10中的laoarray中,而0索引为null。
在初始化System.out.println("laoarray length = "+laoarray.size());变量之后,您可以通过简单的“PageLoader.java”中的laoarray来验证是否正在发生这种情况。
如果这是正确的,那么您可以将方法getAllLinkedInUsersFromDatabase()中的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发布于 2015-04-24 11:51:16
你是从-1开始的吗?在添加到数组列表之前先做counter++。这意味着第一个条目永远不会被填充。
您可以编辑从索引0开始的代码,或者在for循环中检查老千在处理它之前是否为空。
发布于 2015-04-24 11:53:29
这段代码似乎不完整,但我的猜测是在添加项之前修改计数器,因此,如果您有一个数组,并以counter =0开头,您可以将第一个元素添加到位置1,而位置0仍然为空。
使:
LinkedInAccountObject lao = new LinkedInAccountObject();
.... fill object values ......
laoarray.add(counter, lao);
counter++; https://stackoverflow.com/questions/29846721
复制相似问题