我在我的应用中遇到了三到两次相同的联系人,这种情况发生在某些联系人而不是每个联系人上。在我的应用程序中,一切都按预期工作,但是单击我的“显示联系人”时,显示三个时间相同的联系人,但在手机联系人中仅存储一次。我从我这边尝试了一切,但是无法解决这个问题,请问有什么机构可以帮助我。还是有其他替代方法可以做到这一点。
这是我的代码:
@Override
protected Integer doInBackground(Void... params) {
try {
db = new WhooshhDB(myContext);
this.list = new ArrayList<>();
ContentResolver cr = myContext.getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
if ((cur != null ? cur.getCount() : 0) > 0) {
while (cur != null && cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
if (cur.getInt(cur.getColumnIndex(
ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
ContactModel model = new ContactModel();
if (phoneNo.replaceAll("\\s", "").trim().length() > 7) {
model.name = name;
model.mobileNumber = phoneNo.replaceAll("\\s", "");
if (model.mobileNumber.contains("-")) {
model.mobileNumber = model.mobileNumber.replaceAll("-", "");
}
model.iconHexColor = AppConstant.getRandomSubscriptionHexColor(myContext);
if (!phoneNumber.equals(model.mobileNumber)) {
list.add(model);
}
}
Log.i("FetchContacts", "Name: " + name);
Log.i("FetchContacts", "Phone Number: " + phoneNo);
}
pCur.close();
}
}
}
if (cur != null) {
cur.close();
}
return AppConstant.SUCCESS;
} catch (Exception ex) {
return null;
}
}
您正在为每个电话的每个联系人打印那些“
FetchContacts”日志,因此,如果一个联系人为她存储了多个电话,您将看到它多次打印(即使它是相同的电话号码)。
如果您安装了类似Whatsapp的应用程序,那么几乎总是会看到每个联系人的所有电话号码重复,从而导致这些日志的打印次数超过每个联系人一次。
而且,这是通过电话获得联系的缓慢而痛苦的方式。取而代之的是,您可以直接通过Phones.CONTENT_URI直接查询并获取数据库中的所有电话,然后通过Contact-
ID将它们映射到联系人中:
Map<String, List<String>> contacts = new HashMap<String, List<String>>();
String[] projection = { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
Cursor cur = cr.query(Phone.CONTENT_URI, projection, null, null, null);
while (cur != null && cur.moveToNext()) {
long id = cur.getLong(0); // contact ID
String name = cur.getString(1); // contact name
String data = cur.getString(2); // the actual info, e.g. +1-212-555-1234
Log.d(TAG, "got " + id + ", " + name + ", " + data);
// add info to existing list if this contact-id was already found, or create a new list in case it's new
String key = id + " - " + name;
List<String> infos;
if (contacts.containsKey(key)) {
infos = contacts.get(key);
} else {
infos = new ArrayList<String>();
contacts.put(key, infos);
}
infos.add(data);
}
// contacts will now contain a mapping from id+name to a list of phones.
// you can enforce uniqueness of phones while adding them to the list as well.
我想从Android的联系簿中获得电话号码。我尝试了许多方法,但我无法获得电话号码。我有联系人姓名和状态,但当我尝试获取电话号码时,它不起作用。我的代码是。
我是新的应用程序开发人员,所以我写了一个代码,希望从通讯录中读取联系人列表,并成功点击该联系人。现在的问题是,当单击“我的联系人”列表视图中显示的联系人时,我想在不同的页面上显示联系人的姓名和电话号码。我想在add_friend类中显示姓名和电话号码。 这是联系人。JAVA } 这是contactADAPTER } 这是回收者的观点 我想在这里显示所选联系人的姓名和号码 公共类Add_Friend
public void OnBindViewWholder(@nonnull MyViewWholder持有者,int位置){
问题内容: 我正在尝试制作一个程序,一次显示3个框。我以为,如果您为设置一个类,它将每秒显示一个新框。 所以这是我想出的代码: } 它有效,但不是我想要的方式。在上一个按ok之后,它每秒显示一个新框,而不是每秒显示一个新框。 因此,当我按下“按下”键时,它会等待1秒钟并产生一个盒子。当我按“确定”时,它会等待1秒钟并生成另一个,依此类推。知道如何使3个盒子接连产生1个吗? 问题答案: 使用JOpt
背景: 我为android写了一个简单的小拨号器,可以拨打联系人的电话号码 问题: 我想打电话给联系人,而不是电话号码,这样Android: 如果联系人有两个号码:将启动电话号码选择对话框,然后启动通话 当然,我可以从头开始实现一个弹出窗口,但我更愿意委托给一个标准操作,这样用户就可以使用与使用标准拨号器相同的用户体验。
每次尝试提交此联系人表单时,都会收到以下错误消息: “请输入您的消息。” 名称错误消息和电子邮件错误消息不会出现,除非我将它们留空。我尝试在HTML中指定post。 以下是HTML: 下面是PHP: