我有以下代码。从Android联系人数据库获取联系人ID未按预期工作
int phoneContactID = new Random().nextInt();
Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(contactNumber)), new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID},null,null,null);
try
{
contactLookupCursor.moveToFirst();
while(contactLookupCursor.moveToNext())
{
phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
}
}
finally
{
contactLookupCursor.close();
}
上述代码中的问题是,即使我给模拟器联系人中的现有号码,它不会返回任何结果。我正在测试它一个小时后,它工作正常,现在当我再次测试它时,它没有返回任何东西。我不确定代码是否有问题。我想要做的是获得一个与多个数字相匹配的ID。例如说有一个名为“A”的联系人名称,而A有两个数字。基本上A的联系人ID应该是1,而不管我指的是哪个号码。我的假设是否正确?
更新:我做了更多的测试。假设一个号码在222-222-2222这样的联系人数据库中没有国家代码存储。只有当我通过2222222222或222-222-2222时,使用下面的代码进行搜索才会返回联系人ID。如果相同数量的存储像12222222222有效的接触式ID只收到如果我搜索号码是12222222222.
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone._ID,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(contactNumber));
Cursor c = context.getContentResolver().query(contactUri, projection, null, null, null);
if (c.moveToFirst()) {
phoneContactID = c.getInt(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}
我不知道如果我错在这里做一些事情。任何帮助,将不胜感激。
伟大的+1为我的身边。真正有用的 – Harshid
一些错误,你有两次编码(contactNumber),在某些情况下,如果你的设备中的电话号码包括国家代码,你的结果为空。 – jjLin
为什么使用“new Random()。nextInt();”?在这种情况下,您应该写入-1或将其更改为可空整数类型。 –