我有以下代碼。從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或將其更改爲可空整數類型。 –