簡體   English   中英

無法從ArrayList獲取值

[英]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的新實例。 然后繼續將counter1 因此,在這種情況下, counter現在為0因此變為1

在上一行執行laoarray.add(counter, lao);所有上傳的代碼之后,它會執行laoarray.add(counter, lao); 這里counter為1會將lao對象添加到位置索引為1的laoarray上,位置索引0為null 然后重復直到ResultSet的結尾。 這意味着,如果您的rs變量返回10行,則會將它們添加到索引110 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM