Tôi đang cố gắng tìm một số liên lạc theo tên hiển thị. Mục đích là để mở liên hệ này và thêm nhiều dữ liệu hơn cho nó (cụ thể là số điện thoại), nhưng tôi đang đấu tranh để tìm thấy số liên lạc mà tôi muốn cập nhật.Android - Tìm số liên lạc theo tên hiển thị
Đây là mã Tôi đang sử dụng:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
tôi có một số liên lạc gọi là "John Johnson", nhưng phương pháp này luôn trả về "không tìm thấy". Tôi cũng đã thử tìm kiếm một liên hệ chỉ với một tên, do đó không có sự khác biệt.
Tôi nghi ngờ rằng có vấn đề gì đó, vì tôi không thể tìm thấy ví dụ trực tuyến để tìm kiếm địa chỉ liên hệ với tên hiển thị cụ thể, và dường như tên hiển thị là một loại thông tin đặc biệt, khác với ví dụ số điện thoại.
Bất kỳ ý tưởng nào tôi có thể đạt được để tìm John Johnson?
UPDATE: Tôi phát hiện ra làm thế nào để tìm thấy một số liên lạc bằng tên hiển thị:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
Mã này trả về id xúc của tiếp xúc đầu tiên với tên hiển thị "John Johnson". Trong mã ban đầu của tôi tôi đã có sai uri và lựa chọn sai trong truy vấn của tôi.
Cảm ơn bạn đã trả lời, nhưng nó đã không giúp đỡ để có chiếu null. Cùng một mã hoạt động khi tôi đang tìm kiếm một số điện thoại, vì vậy có thể có PhoneLookup._ID làm phép chiếu ngay cả khi tôi đang tìm kiếm một kết quả phù hợp trong một cột khác. Nếu tôi đã hiểu chính xác nó, phép chiếu là dữ liệu bạn muốn lấy lại từ truy vấn, không phải dữ liệu bạn đang tìm kiếm. Vì vậy, nếu bạn đặt phép chiếu thành null, bạn chỉ cần yêu cầu nhận tất cả dữ liệu từ các liên hệ phù hợp mà bạn nhận được từ truy vấn của mình. –