From 4fa4ced829a3656d9494dfb0ae8a6c0fac8ec2b8 Mon Sep 17 00:00:00 2001 From: yijunchao Date: Wed, 10 May 2023 19:33:14 +0800 Subject: [PATCH] =?UTF-8?q?Contact.java=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/micode/notes/data/Contact.java | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/代码解读/MiNotes-master/app/src/main/java/net/micode/notes/data/Contact.java b/代码解读/MiNotes-master/app/src/main/java/net/micode/notes/data/Contact.java index 61f0839..3e58511 100644 --- a/代码解读/MiNotes-master/app/src/main/java/net/micode/notes/data/Contact.java +++ b/代码解读/MiNotes-master/app/src/main/java/net/micode/notes/data/Contact.java @@ -1,6 +1,7 @@ package net.micode.notes.data; import android.content.Context; + import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; @@ -8,45 +9,35 @@ import android.telephony.PhoneNumberUtils; import android.util.Log; import java.util.HashMap; - -public class Contact { - - // 声明一个用于缓存联系人的HashMap +//change +public class Contact { //联系人 private static HashMap sContactCache; - - // 声明日志输出的TAG private static final String TAG = "Contact"; - // 定义查询联系人的选择条件,使用占位符 "?" 和 "IN" 子句 - private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER + // 定义字符串CALLER_ID_SELECTION + private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + + + Phone.NUMBER + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Data.RAW_CONTACT_ID + " IN " + "(SELECT raw_contact_id " + " FROM phone_lookup" + " WHERE min_match = '+')"; - /** - * 获取联系人名称 - * @param context 上下文环境 - * @param phoneNumber 联系人的电话号码 - * @return 联系人的名称,如果找不到返回null - */ + // 获取联系人 public static String getContact(Context context, String phoneNumber) { - // 如果联系人缓存为空,则创建一个新的HashMap if(sContactCache == null) { sContactCache = new HashMap(); } - // 如果联系人缓存中已经存在该电话号码的联系人,则直接返回联系人名称 + // 查找HashMap中是否已有phoneNumber信息 if(sContactCache.containsKey(phoneNumber)) { return sContactCache.get(phoneNumber); } - // 使用PhoneNumberUtils工具类将电话号码转换为拨号最小匹配 String selection = CALLER_ID_SELECTION.replace("+", PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); - - // 查询联系人 + // 查找数据库中phoneNumber的信息 Cursor cursor = context.getContentResolver().query( Data.CONTENT_URI, new String [] { Phone.DISPLAY_NAME }, @@ -54,20 +45,23 @@ public class Contact { new String[] { phoneNumber }, null); - // 如果查询到联系人,则将联系人名称存入缓存并返回联系人名称 + // 判定查询结果 + // moveToFirst()返回第一条 if (cursor != null && cursor.moveToFirst()) { try { + // 找到相关信息 String name = cursor.getString(0); sContactCache.put(phoneNumber, name); return name; + // 异常 } catch (IndexOutOfBoundsException e) { Log.e(TAG, " Cursor get string error " + e.toString()); return null; } finally { cursor.close(); } + // 未找到相关信息 } else { - // 如果找不到联系人,则打印日志并返回null Log.d(TAG, "No contact matched with number:" + phoneNumber); return null; }