自己作成クラスのオブジェクトの 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;
}