diff --git a/Contact.java b/Contact.java index 4d13f12..138bebe 100644 --- a/Contact.java +++ b/Contact.java @@ -91,3 +91,29 @@ public class Contact { // 定义 Contact 类 } } } + + +/* +缓存检查: + +首先检查 sContactCache 是否已初始化,如果未初始化,则创建一个新的 HashMap。 +然后检查缓存中是否已经存有该电话号码的联系人姓名。如果有,直接返回缓存中的结果。 +查询联系人: + +如果缓存中没有该联系人,构建一个查询条件 selection,并用 PhoneNumberUtils.toCallerIDMinMatch(phoneNumber) 方法将 + 符号替换为号码的最小匹配形式。 +通过 context.getContentResolver().query 方法查询联系人数据库,查询条件是 selection,查询的列为联系人显示姓名(Phone.DISPLAY_NAME)。 +结果处理: + +如果查询返回有效的游标(即找到联系人信息),则尝试获取第一个结果的联系人姓名。 +将获取到的联系人姓名缓存起来,方便下次快速查询。 +错误处理: + +如果发生异常(例如游标获取数据时出现 IndexOutOfBoundsException),则记录错误日志并返回 null。 +如果查询没有返回任何联系人数据,则记录调试日志,并返回 null。 +资源释放: + +确保游标在操作完成后关闭,以释放数据库资源。 + 总结 +这段代码的功能是通过电话号码查询并返回对应的联系人姓名。为了提高效率,查询结果会被缓存,以避免重复查询数据库。代码充分利用了 ContentResolver 进行联系人数据的查询,并在出现问题时进行了异常处理和日志记录。 + +*/ \ No newline at end of file