检查电话号码存在于android的联系人列表中

时间:2013-03-22 08:44:50

标签: android android-intent

我试图检查联系人列表中存在的号码,我使用下面的代码,但我总是在这行收到错误

 Cursor cur = this.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);

任何人都可以帮我找出问题,我已经允许在清单中阅读我的联系人

  public String getContactName(String number)
{
    String name = null;
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
    Cursor cur = this.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
    try 
    {
       if (cur.moveToFirst())
       {
           name = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
           return name;
       }
    }
    finally 
    {
    if (cur != null)
       cur.close();
    }
    return "unknown number";
}

这是我的错误日志! error log

2 个答案:

答案 0 :(得分:6)

尝试此代码:(使用上下文)

public boolean contactExists(Context context, String number) {
/// number is the phone number
Uri lookupUri = Uri.withAppendedPath(
PhoneLookup.CONTENT_FILTER_URI, 
Uri.encode(number));
String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
try {
    if (cur.moveToFirst()) {
        return true;
    }
}
finally {
    if (cur != null)
        cur.close();
    }
    return false;
}

答案 1 :(得分:0)

对我有用。已处理NullPointerException。

public boolean contactExists(Context context, String number) {
    if (number != null) {
        ContentResolver cr = context.getContentResolver();
        Cursor curContacts = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

        while (curContacts.moveToNext()) {
            String contactNumber = curContacts.getString(curContacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            if (number.equals(contactNumber)) {
                return true;
            }
        }
        return false;
    } else {
        return false;
    }
}