[英]Unable to get values from a hashmap which uses a arraylist as value is cleared
[英]Unable to get values from ArrayList
我有一個帶對象的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()
遍歷一個循環。 現在,如果這是正確的話,那么當存儲第一個數據時,您的方法將在lao
創建一個LinkedInAccountObject
的新實例。 然后繼續將counter
加1
。 因此,在這種情況下, counter
現在為0
因此變為1
。
在上一行執行laoarray.add(counter, lao);
所有上傳的代碼之后,它會執行laoarray.add(counter, lao);
。 這里counter為1會將lao
對象添加到位置索引為1的laoarray
上,位置索引0為null
。 然后重復直到ResultSet
的結尾。 這意味着,如果您的rs
變量返回10行,則會將它們添加到索引1
到10
laoarray
中,其中0
index為空。
您可以通過System.out.println("laoarray length = "+laoarray.size());
來驗證是否正在發生這種情況System.out.println("laoarray length = "+laoarray.size());
初始化laoarray
變量后,在“ PageLoader.java”中laoarray
。
如果正確,那么您可以刪除counter++;
在方法getAllLinkedInUsersFromDatabase()
中從其當前位置開始,並在laoarray.add(counter, lao);
之后進行設置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
您是否從-1開始計數? 在添加到arraylist之前,您需要先進行counter ++操作。 這意味着第一個條目永遠不會被填充。
您可以編輯代碼以從索引0開始,或者在for循環中檢查老撾在處理之前是否不為null。
這段代碼似乎並不完整,但是我猜想是在添加項目之前先修改計數器,所以如果您有一個數組並以counter = 0開頭,則將第一個元素添加到位置1,位置0保持為空。
做了:
LinkedInAccountObject lao = new LinkedInAccountObject();
.... fill object values ......
laoarray.add(counter, lao);
counter++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.