android - 获取的联系号码显示重复号码(Whatsapp 和双人号码)
问题描述
我正在创建一个应用程序,它将在警报对话框中将联系人的电话号码显示为列表。我的问题是它会显示重复的号码,其中联系人在电话联系人应用程序中没有重复的号码。(我的假设是它是从 whatsapp 获取的号码,双人号码等)
这是我在 onActivityResult 中获取代码的联系人。
if (resultCode == RESULT_OK) {
switch (reqCode) {
case REQUEST_CODE:
final TextView phoneInput = (TextView) findViewById(R.id.contact);
Cursor cursor = null;
String phoneNumber = "";
List<String> allNumbers = new ArrayList<String>();
int phoneIdx = 0;
try {
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null);
phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
if (cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
phoneNumber = cursor.getString(phoneIdx);
allNumbers.add(phoneNumber);
cursor.moveToNext();
}
} else {
//no results actions
}
} catch (Exception e) {
//error actions
} finally {
if (cursor != null) {
cursor.close();
}
final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
String selectedNumber = items[item].toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}
});
AlertDialog alert = builder.create();
if(allNumbers.size() > 1) {
alert.show();
} else {
String selectedNumber = phoneNumber.toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}
if (phoneNumber.length() == 0) {
//no numbers found actions
}
}
break;
}
} else {
//activity result error actions
}
解决方案
请试试这个,希望对你有帮助
Map<String, String> filteredList = new HashMap<>();
if (resultCode == RESULT_OK) {
switch (reqCode) {
case REQUEST_CODE:
final TextView phoneInput = (TextView) findViewById(R.id.contact);
Cursor cursor = null;
String phoneNumber = "";
List<String> allNumbers = new ArrayList<String>();
int phoneIdx = 0;
try {
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null);
phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
if (cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
phoneNumber = cursor.getString(phoneIdx);
allNumbers.add(phoneNumber);
filteredList.put(phoneNumber,"name");
cursor.moveToNext();
}
} else {
//no results actions
}
} catch (Exception e) {
//error actions
} finally {
if (cursor != null) {
cursor.close();
}
final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
String selectedNumber = items[item].toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}
});
AlertDialog alert = builder.create();
if(allNumbers.size() > 1) {
alert.show();
} else {
String selectedNumber = phoneNumber.toString();
selectedNumber = selectedNumber.replace("-", "");
phoneInput.setText(selectedNumber);
}
if (phoneNumber.length() == 0) {
//no numbers found actions
}
}
break;
}
} else {
//activity result error actions
}
推荐阅读
- django - 带有白噪声的 Heroku 不提供 django 静态文件
- flutter - 在绘制后为非典型 Flutter Material 小部件形状添加边框
- c# - ASP.Net Core 5 MVC 使用数据库记录填充下拉列表
- node.js - 反应 - 来自后端的初始状态 - 乐观的 UI
- javascript - 仅将 JS 中的 IF 语句应用于特定的 html 文件
- lisp - 如何正确迭代符号作为创建哈希表的键?
- javascript - jQuery - 限制输入数字和一个小数点,只有两个小数点
- rust - 如何在不考虑数据竞争的情况下从多个线程中改变共享变量?
- excel - Excel 2007,逻辑或响应不一致
- javascript - 使用Angular中的复选框从数组中删除数据?