【发布时间】:2018-04-13 10:04:58
【问题描述】:
我在stackoverflow 上搜索过这个,发现与这个案例无关的线索。我自己也尝试过,并且会继续尝试直到解决。但是如果有人告诉我我是否在代码中犯了任何错误,那就太好了。
我有一个HashSet,这样我就可以避免重复的字符串被添加到其中。如果 HashSet 正在添加,那么它必须是一个唯一的字符串。
我的班级声明是:
public List<String> ContactsList;
public List<String> ContactsNumbersList;
我在HashSet 的帮助下获取联系人并将其添加到这两个列表中的代码是:
ContactsList = new ArrayList<String>();
ContactsNumbersList = new ArrayList<String>();
HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>();
// Contacts Database queries
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[] {ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, ContactsContract.CommonDataKinds.Phone.SORT_KEY_PRIMARY +" ASC");
while (cursor.moveToNext())
{
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (normalizedNumbersAlreadyFound.add(phoneNumber))
{
phoneNumber = phoneNumber.replace("-","");
phoneNumber = phoneNumber.replace(" ","");
phoneNumber = phoneNumber.replace("(","");
phoneNumber = phoneNumber.replace(")","");
ContactsList.add(name);
ContactsNumbersList.add(phoneNumber);
}
}
cursor.close();
那么为什么我的ContactsNumbersList 有重复的条目...?提前感谢您的任何建议..这将对我有所帮助。
【问题讨论】:
-
在确保原始字符串不存在后替换一些字符。可能是原因。另外,为什么不直接在一个Set中添加元素,然后用它来构建一个列表呢?
-
可能是因为您在将电话号码添加到
normalizedNumbersAlreadyFound集合之后 删除了垃圾。尝试在检查之前进行清理。