2015-07-04 53 views
0

我通過ArraylistParseObject,然後我把一個一個foreach循環提取具有條件時,用戶對象不等於null的項目。我面臨兩個問題。 1.如果我通過將不同的數據傳遞給另一個列表,然後在我的適配器中傳遞該列表來完成以下幾行代碼,那麼我得到的數字就是隨機數據:例如,如果項目#1的名稱是「MAC」,那麼它顯示在項目3ConcurrentModificationException在爲每個Android

ArrayList<ParseObject> checkRequestedNetArrayList = new ArrayList<ParseObject>(); 
requestedNetArrayList = (ArrayList<ParseObject>) objects; 
MyResponsibilitesActivity.requestedNetArrayList = requestedNetArrayList; 
adapterRequest = new GenericAdapter<ParseObject>(
    getApplicationContext(), 
    requestedNetArrayList, 
    R.layout.requested_trust_net_list_item, 
    requestedDataBinder); 

requestListView.setAdapter(adapterRequest); 

requestedNetArrayList = (ArrayList<ParseObject>) objects; 

for(ParseObject object: objects){ 
    System.out.println(object); 
    object.getParseObject("user"); 
    if(object.has("user")){ 

     checkRequestedNetArrayList.add(object); 

    }else{ 
     checkRequestedNetArrayList.remove(object); 
    } 

} 

adapterRequest = new GenericAdapter<ParseObject>(
    getApplicationContext(), 
    checkRequestedNetArrayList, 
    R.layout.requested_trust_net_list_item, 
requestedDataBinder); 

requestListView.setAdapter(adapterRequest); 
  • 如果我做了下面的代碼行只是直接在同一個列表,給出的項目,我正在java.util.ConcurrentModificationException

    for(ParseObject object: objects){ 
    
        if(object.has("user")){ 
    
         requestedNetArrayList.add(object); 
    
        } 
    } 
    else{ 
        requestedNetArrayList.remove(object); 
    } 
    
    adapterRequest = new GenericAdapter<ParseObject>(
        getApplicationContext(), 
        requestedNetArrayList, 
        R.layout.requested_trust_net_list_item, 
        requestedDataBinder); 
    
    requestListView.setAdapter(adapterRequest); 
    

    }

  • 請幫我看看這裏。

    +1

    重新格式化第二塊代碼後,我意識到它甚至不正確。你的大括號是不匹配的,而且你有一個掛在中間的「別」結構。請修復您的代碼,以便至少編譯它。 –

    回答

    5

    訪問它時,不能從列表中刪除元素。 你必須使用Iterator。

    你在哪裏都刪除的對象,請使用it.remove();

    Iterator<ParseObject> it = objects.iterator(); 
    while(it.hasNext()){ 
        Object object = it.next(); 
        //your stuff 
        it.remove(); 
    } 
    

    我想你可能想看看這篇文章deep copy也。

    UPDATE

    既然你要的元素添加到列表中是不能直接用迭代器。現在,你所面對的問題,因爲你是直接分配objectsrequestedNetArrayList的而不是做以下列方式:

    ArrayList<ParseObject> requestedNetArrayList = new ArrayList<>(objects); 
    

    然後在objects迭代,你現在做的,從刪除或添加到 requestedNetArrayList(其你幾乎已經在做)。

    +0

    感謝您在這裏的答案。我只需要知道一件事,你能告訴我如何向Iterator添加項目,就像我理解的那樣。刪除部分但不知道如何添加項目以及如何進一步傳遞該項目。 –

    +0

    我已經更新了答案。隨着第一個版本的答案,我只是想解釋你爲什麼得到這個例外。只需更改'requestedNetArrayList'的初始化即可解決您的問題。 – Karthik

    +0

    感謝您的回答。它的工作原理 –

    0

    不是指定對象以requestedNetArrayList參考的, 創建具有相同內容

    requestedNetArrayList=new ArrayList<ParseObject>(objects); 
    

    然後你可以遍歷對象和修改requestedNetArrayList一個新的ArrayList。

    1

    當你反覆使用,每個施工收集

    for (Object x : collection) ... 
    

    你有Iterator對象爲集合的隱含創建。此迭代器執行檢查:自從迭代器創建以來,集合是否已更改?如果是這樣,拋出一個異常。所以,你應該避免對你的集合進行任何修改,直到迭代器完成。這意味着,你不應該使用添加和刪除。

    無論哪種方式,最好通過索引訪問ArrayList,因爲它會阻止創建Iterator對象。像這樣:

    for (int i = objects.size() - 1; i >= 0; i--) { 
        ParseObject object = objects.get(i); 
        // when iterating from tail to head, you can safely add or remove objects to/from this array list 
    } 
    
    +0

    感謝您的回答。它在count()處發生此錯誤對於類型列表,方法count()未定義。你能幫我嗎 –

    +0

    對不起。我錯了。使用size()而不是count() – AterLux

    +0

    我只是改變它。實際上,我必須將數據傳遞給數組列表以將其傳遞到適配器中。你能否根據我的情況制定一個條件,在這個條件下我需要發送一些與我的條件相關的數據例如object.has(「user」),並且在這種情況下數據將被添加到數組列表中,所以我可以將它傳遞給我的適配器 –

    相關問題