1

自己作成クラスのオブジェクトの 2 つの配列リストがあります。比較後、両方から共通オブジェクトを削除し、共通要素を取得するためのメソッドを準備しました。共通要素を見つけた後、removeAll() メソッドを呼び出して共通要素を削除しますが、その要素は削除されません。以前にこの方法を使用したことがありますが、このタイプのエラーは発生しませんでした。コードは次のとおりです。

public void SynchphoneBookwithDB() {
    //phone contacts
    ArrayList < Contacts > phone_contacts = CommonUtility.getAllContacts(ctx);
    Log.e("SynchphoneBookwithDb", "phonebooksize" + phone_contacts.size());
    //get data base contacts 
    ArrayList < Contacts > db_contacts = UserService.getUserServiceInstance(ctx).getNameNumberIdIsmycontactIsBlockedFromContatcsTable();
    Log.e("SynchphoneBookwithDb", "DBSIZE" + db_contacts.size());
    //get common contacts
    ArrayList < Contacts > common_contacts = getCommonContacts(phone_contacts, db_contacts, false);
    Log.e("SynchphoneBookwithDb", "common_contacts" + common_contacts.size());
    //not operation on common numbers so remove them 
    phone_contacts.removeAll(common_contacts);
    db_contacts.removeAll(common_contacts);

    //remained in phone must be added to db 
    Log.e("SynchphoneBookwithDb", "afetr removing contacts phonebooksize" + phone_contacts.size());

    Log.e("SynchphoneBookwithDb", "after removing contacts DBSIZE" + db_contacts.size());

}

一般的な要素を取得するための私の方法は次のとおりです。

public ArrayList < Contacts > getCommonContacts(ArrayList < Contacts > referenced, ArrayList < Contacts > other, Boolean insertInDb) {
    //       Log.d("Inside common contacts","start"); 
    ArrayList < Contacts > commonArrayList = new ArrayList < Contacts > ();
    int count_ref = referenced.size();

    for (int i = 0; i < count_ref; i++) {
        int count_other = other.size();
        for (int j = 0; j < count_other; j++) {
            if (referenced.get(i).getNumber().equals(other.get(j).getNumber())) {
                commonArrayList.add(other.get(j));
                if (insertInDb) { //insert from server as it is 
                    other.get(j).setIsmycontact(true);
                    long k = UserService.getUserServiceInstance(ctx).addInContatcs(other.get(j));
                }

            }
        }
    }

    return commonArrayList;
}
4

1 に答える 1

2

オブジェクトが等しくないようです! それらの数値フィールドだけです。

連絡先クラスの equals メソッドをオーバーライドし、それを使用してそれらを比較します。

ArrayList#removeAll(Collection)は、等号を使用する List#remove(Object) を使用します

より正式には、 (o==null ? get(i)==null : o.equals(get(i))) (そのような要素が存在する場合) となる最小のインデックス i を持つ要素を削除します。

于 2013-10-31T09:46:11.930 に答える