簡體   English   中英

對象未被替換

[英]Object not being replaced

我有兩個聯系人列表,我想用一個替換為:

private PhoneCAdapter getContactAdapter(ArrayList<UserAgenda> phoneContacts) throws NetworkConnetionException {     
    List<UserAgenda> serverContacts = WithingsAPI.getInstance().getContactListByType(Common.CONTACT_LIST_TYPE_FILE,"ALL");

    for(UserAgenda pc: phoneContacts){                  
        for(UserAgenda sc : serverContacts){
            if(pc.getEmails() != null){
                ArrayList<String> emailsPc = new ArrayList<String>(pc.getEmails());
                for(String epc: emailsPc){                      
                    ArrayList<String> emailList = new ArrayList<String>(sc.getEmails());                    
                    String emailServer = emailList.get(0);//server contact has only one email                   
                    if(epc.equals(emailServer)){//we have to substitute the object from the server with the phone ones.
                        pc = sc;
                    }
                }
            }
        }
    }   

    PhoneCAdapter ca = new PhoneCAdapter(this, 0, phoneContacts,PhoneContacts.this );
    return ca;
}

但是在循環之后,我的變量phoneContacts仍然具有相同的值。 僅當我手動將字段更改為:

if(epc.equals(emailServer)){
    pc.setUserOfWW(sc.getUserOfWW());                           
    if(sc.getInvited().equals("true")){                             
       pc.setInvited("true");                           
    }
    else{
        pc.setInvited("false");//here we have people who are/arent user of WW
        pc.setId2invite(sc.getId2invite());
    }
}

我如何用我從服務器獲得的用戶身份用電話中的信息替換我的對象,而無需手動對每個字段進行操作?

更改用於迭代器的局部變量不會更改集合的內容。 了解修改變量值所引用的對象與修改變量之間的區別非常重要。 如果修改列表中引用所引用的對象,則該更改將通過列表可見。 如果您修改的變量基本上包含該引用的副本 ,則根本不會影響該列表。

我懷疑您想要:

for (int i = 0; i < phoneContacts.size(); i++) {                  
    UserAgenda pc = phoneContacts.get(i);
    for (UserAgenda sc : serverContacts) {
        if (pc.getEmails() != null) {
            ArrayList<String> emailsPc = new ArrayList<String>(pc.getEmails());
            for (String epc: emailsPc) {
                ArrayList<String> emailList = new ArrayList<String>(sc.getEmails());                    
                String emailServer = emailList.get(0);
                if (epc.equals(emailServer)) {
                    pc = sc;
                    // Replace the value in the collection too...
                    phoneContacts.set(i, sc);
                    // Do you want to break here?
                }
            }
        }
    }
}

目前尚不清楚為什么要在循環中創建數組列表(或者為什么要在每次迭代中重新創建相同的電子郵件列表)。 基本上代碼是目前非常不清楚,我強烈懷疑這可以大大簡化-但它是很難做到這一點不知道你想達到的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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