2012-04-01 10 views
7

Tôi có số điện thoại. Có cách nào để kiểm tra xem số điện thoại có tồn tại trong cơ sở dữ liệu danh bạ trong thiết bị hay không? Tùy thuộc vào điều tôi cần phải di chuyển xa hơn trong ứng dụng của mình. Vui lòng đề xuất hoặc nếu bất kỳ ai có thể có đoạn mã mẫu, vui lòng cung cấp.tồn tại trong danh bạ

dưới đây là mã tôi đã viết:

public boolean contactExists(Activity _activity, String number) { 
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
    Cursor cur = _activity.getContentResolver().query(number, mPhoneNumberProjection, null, null, null); 
    try { 
     if (cur.moveToFirst()) { 
      return true; 
     } 
    } finally { 
     if (cur != null) 
      cur.close(); 
    } 
    return false; 
}// contactExists 

Cảm ơn trước ...

+0

hi @ user1306412 trong trường hợp của tôi chức năng này luôn luôn trở về sai, tôi làm như câu trả lời, bạn cho tôi một số gợi ý trong nó? –

Trả lời

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

Ngoại lệ con trỏ nullled.

+0

heloo @Ishu tình trạng của tôi luôn luôn đi sai, tôi kiểm tra nếu nó trở lại đúng tôi chèn hồ sơ khác nếu không nhưng nó tất cả thời gian trở lại sai nếu không trùng lặp sau đó cũng –

+0

@NiravMehta - Tôi đề nghị bạn không đi sao chép mã của người khác mà không cố gắng hiểu nó. –

+0

@Ishu - đối phó với một đối số null như vậy là một ý tưởng tồi. Tốt hơn là để cho NPE xảy ra, và sau đó khi nó theo dõi vị trí/tại sao bạn đang gọi 'contactExists' với đối số' null'. Nó luôn luôn là tốt hơn để sửa chữa lỗi nguyên nhân gốc hơn để ẩn nó. –

3

Một sự thay đổi nhỏ trong mã của bạn :: Bạn cần có lookupUri ..

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

tôi đã cố gắng mã ở trên vào một thiết bị kem (SIII) và nó làm việc như vậy sau khi một số tìm kiếm tôi đã kết thúc việc tạo ra phương pháp này (được làm việc độc đáo)

private boolean isContact(String incommingNumber) { 
     Cursor cursor =null; 
     String name = null; 
     try { 
      Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(incommingNumber)); 
      cursor = MainService.this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null); 
      if (cursor != null && cursor.moveToFirst()) { 
       name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
      } 
     } finally { 
      if(cursor!=null){ 
       cursor.close(); 
      } 
     } 
     return Util.hasValue(name); 
    }