From d9b9dde803af3ef918f686490c8a08ae564b3134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=8F=E5=BD=A6=E5=8D=9A?= <1139346339@qq.com> Date: Sat, 23 Dec 2023 11:16:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E5=87=86=E6=89=B9=E6=B3=A8=E4=BA=86ex?= =?UTF-8?q?ception=E4=B8=A4=E4=B8=AA=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/report.docx | Bin 428070 -> 427839 bytes .../java/net/micode/notes/data/Contact.java | 50 ++++++++++++------ .../exception/ActionFailureException.java | 23 +++++--- .../exception/NetworkFailureException.java | 23 +++++--- 4 files changed, 66 insertions(+), 30 deletions(-) diff --git a/doc/report.docx b/doc/report.docx index 932d44530a6bdee12af6607e1ec2cb4b581fdd9e..16fb34e646a1e46c490cf363f6498bbb359b355c 100644 GIT binary patch delta 17750 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%0AUpV2E%DH0U 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 diff --git a/src/main/java/net/micode/notes/data/Contact.java b/src/main/java/net/micode/notes/data/Contact.java index 1e04184..b42deca 100644 --- a/src/main/java/net/micode/notes/data/Contact.java +++ b/src/main/java/net/micode/notes/data/Contact.java @@ -22,42 +22,57 @@ import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; import android.telephony.PhoneNumberUtils; import android.util.Log; - import java.util.HashMap; -public class Contact {//定义一个Contact类,类别标签为Contact,包含一个用于存储用户信息的HashMap - private static HashMap sContactCache; - private static final String TAG = "Contact"; -//定义静态常量,用于查询指定联系人 - 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 " +// 该代码是一个名为Contact的类,用于获取联系人信息。 +//代码中定义了一个静态的HashMap变量sContactCache,用于缓存联系人信息。sContactCache的键是电话号码,值是联系人姓名。 +//定义了一个字符串常量CALLER_ID_SELECTION,用于查询联系人信息的条件。该条件是通过拼接字符串而得到的,包含了查询电话号码相等、数据类型为电话号码、联系人ID在指定范围内等条件。 +//代码中定义了一个静态方法getContact,用于根据电话号码获取联系人姓名。 +public class Contact { + private static HashMap sContactCache; // 缓存联系人信息 + private static final String TAG = "Contact";//标签 + 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 = '+')"; -//定义一个静态方法getContact,可以通过Contact对象以及电话号码查询联系人。 + + " WHERE min_match = '+')"; // 查询联系人信息的条件 + + /** + * 根据电话号码获取联系人姓名 + * @param context 上下文对象 + * @param phoneNumber 电话号码 + * @return 联系人姓名,如果未找到则返回null + */ +// 该方法首先检查缓存中是否已有该电话号码对应的联系人姓名,如果有则返回缓存中的值。如果缓存中没有该电话号码对应的联系人姓名,则通过查询数据库来获取联系人姓名。 +// 查询数据库的条件是根据电话号码生成的CALLER_ID_SELECTION。如果查询结果不为空且移动到第一条记录,则从结果中提取联系人姓名,并将其存入缓存中。如果查询结果为空,则返回null。 public static String getContact(Context context, String phoneNumber) { - if(sContactCache == null) {//不存在这个联系人则新建一个存储信息 + if (sContactCache == null) { sContactCache = new HashMap(); } - if(sContactCache.containsKey(phoneNumber)) {//如果已经包含电话号码作为关键字对应的用户 - return sContactCache.get(phoneNumber);//直接返回用户的名字,get返回名字 + // 查找HashMap中是否已有phoneNumber信息 + if (sContactCache.containsKey(phoneNumber)) { + return sContactCache.get(phoneNumber);//直接根据键值(电话号码)找到姓名 } String selection = CALLER_ID_SELECTION.replace("+", - PhoneNumberUtils.toCallerIDMinMatch(phoneNumber)); + PhoneNumberUtils.toCallerIDMinMatch(phoneNumber));//最小匹配原则查找电话号码 + + // 查找数据库中phoneNumber的信息 Cursor cursor = context.getContentResolver().query( Data.CONTENT_URI, - new String [] { Phone.DISPLAY_NAME }, + new String[] { Phone.DISPLAY_NAME }, selection, new String[] { phoneNumber }, null); + // 判定查询结果 if (cursor != null && cursor.moveToFirst()) { try { + // 找到相关信息 String name = cursor.getString(0); - sContactCache.put(phoneNumber, name); + sContactCache.put(phoneNumber, name);//放入缓存块 return name; } catch (IndexOutOfBoundsException e) { Log.e(TAG, " Cursor get string error " + e.toString()); @@ -66,7 +81,8 @@ public class Contact {//定义一个Contact类,类别标签为Contact,包含 cursor.close(); } } else { - Log.d(TAG, "No contact matched with number:" + phoneNumber); + // 未找到相关信息 + Log.d(TAG, "No contact matched with number:" + phoneNumber);//给出反馈信息 return null; } } diff --git a/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java b/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java index 83424dc..1909174 100644 --- a/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java +++ b/src/main/java/net/micode/notes/gtask/exception/ActionFailureException.java @@ -15,19 +15,28 @@ */ package net.micode.notes.gtask.exception; +/** + * @method: ActionFailureException + * @description:ActionFailureException 继承了 RuntimeException 类,用于扩展抛错机制,显示具体错误类型 + * 这个类采取直接执行父类构造方法来完成类的构造,总计完成了有参数以及无参数情况下的三种构造方法 + * 定义了私有参数serialVersionUID,是序列化,用于验证版本一致性 + * @date: 11:05 + * @author: Xia Yanbo +*/ -public class ActionFailureException extends RuntimeException {//异常处理程序,定义了全部可能参数下抛出错误 - private static final long serialVersionUID = 4425249765923293627L; - +public class ActionFailureException extends RuntimeException { + private static final long serialVersionUID = 4425249765923293627L;//序列化,用于验证版本一致性 + //构造方法 public ActionFailureException() { - super(); + super();//用构造方法赋初值,调用父类无参数的构造方法 } - + //构造方法 public ActionFailureException(String paramString) { - super(paramString); + super(paramString);//调用父类有参数的构造方法 } - + //构造方法 public ActionFailureException(String paramString, Throwable paramThrowable) { super(paramString, paramThrowable); } } + diff --git a/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java b/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java index 66d6749..331588d 100644 --- a/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java +++ b/src/main/java/net/micode/notes/gtask/exception/NetworkFailureException.java @@ -15,18 +15,29 @@ */ package net.micode.notes.gtask.exception;//调用完成异常处理 +/** + * @method: NetworkFailureException + * @description:NetworkFailureException 继承了 Exception 类,用于扩展抛错机制,显示具体错误类型 + * 这个类采取直接执行父类构造方法来完成类的构造,总计完成了有参数以及无参数情况下的三种构造方法 + * //定义了私有参数serialVersionUID,是序列化,用于验证版本一致性 + * @date: 11:07 + * @author: Xia Yanbo + * @param: + * @param: + * @param: +*/ public class NetworkFailureException extends Exception { - private static final long serialVersionUID = 2107610287180234136L; - + private static final long serialVersionUID = 2107610287180234136L;//序列化,用于验证版本一致性 + //构造方法 public NetworkFailureException() { - super(); + super();//用构造方法赋初值,调用父类无参数的构造方法 } - + //构造方法 public NetworkFailureException(String paramString) { - super(paramString); + super(paramString);//调用父类有参数的构造方法 } - + //构造方法 public NetworkFailureException(String paramString, Throwable paramThrowable) { super(paramString, paramThrowable); }