Android电话本数据查询总结
来源:互联网 发布:湖南机电网络教学平台 编辑:程序博客网 时间:2024/04/28 20:46
该文总结下工作当中维护的联系人模块中的数据查询流程。该流程在很多系统APP上都类似,了解这个过程还是很有必要的。
在Android应用框架中一般都会划分为三层:数据层、数据访问层和业务层。数据层基本都是用sqlite来存储数据,数据访问层是借用四大组件中的内容提供器来实现,业务层就是各个应用,比如电话本。三层结构如下图所示:
这里将详细总结下电话本对数据库的查询流程。
1、创建数据库
当系统启动,所有服务都准备好之后,ContactsUpgradeReceiver类将接受到重启广播,在广播接受类中会去获取联系人数据的实例,在获取实例当中会去创建数据库和表,如下图所示:
2、内容提供器的创建
联系人当中用到最多的数据访问接口都是在ContactsProvider2中创建的。它提供了一些增删改查的接口,这些接口其实就是借用前面创建的数据库进行操作。
3、业务层数据查询流程
当数据层和数据访问层都准备好之后,业务层才可以调用接口。下面给出一个联系人主界面查询数据的大致流程。
联系人的主界面一般会分为几个碎片,每个碎片代表一个界面,在碎片的父类当中会实现数据的异步查询。
举例:DefaultContactBrowseListFragment
它的父类ContactEntryListFragment封装了大部分的工作。包括创建适配器、加载页面、创建查询加载器和查询结束。
子类一般会根据业务的需求来进行各种定制。它的工作有创建适配器、加载页面、创建查询加载器。其实就是对父类实现类的覆盖。在适配器中还会对查询加载器进行查询配置。适配器也有跟碎片一样的实现模式,大部分操作都在父类DefaultContactListAdapter中实现,用户也可以继承它来进行各种查询定制。比如联系人对SIM卡的过滤、对没有分组成员的过滤等等。具体的流程图如下所示:
查询完会返回一个Cursor对象,适配器会用这个对象进行数据和页面控件的绑定。
在业务层中会根据loader机制,最后会调用内容提供器注册的uri,进行异步查询,如下:
final Cursor cursor = getActivity().getContentResolver().query(Contacts.CONTENT_URI, LOOKUP_PROJECTION, Contacts.IN_VISIBLE_GROUP + "!=0", null, null);
接着会根据binder机制走到ContactsProvider2中的查询接口进行查询。在queryLocal方法中会匹配不同的uri进行表的映射和查询配置。
- Android电话本数据查询总结
- iPhone 读取电话本数据
- android 电话本 多音字处理
- Android电话本核心数据结构
- android:查询数据库 指定列 指定列名 并输出查询结果(如查询电话本,SMS的ContentResolver提供的)
- 实训仿QQ电话本-知识总结
- 电话本
- 电话本
- 电话本
- 电话本
- 电话本
- [Android]获取系统电话本实例
- android litepal数据查询
- SQL查询数据查询异常总结
- echarts处理查询数据总结
- android电话本中收藏夹的一些操作
- ListView 使用(电话本读取) - Android(1.5)
- Android OneDayOneExample-2. 读取电话本
- 三大WEB服务器(apache lighttpd nginx) 对比分析
- 前端开发面试题之 HTML
- good explanation of __read_mostly, __init, __exit macros
- MVC常遇见的几个场景代码分享
- Mybatis步步进阶(三)——1:N关系配置 && 动态SQL拼接
- Android电话本数据查询总结
- 关于pycharm编码问题
- 文章接口编写
- 关于解决JS中方法名重复问题的简单办法
- Web前端优化最佳实践及工具集锦
- sendto() 向广播地址发包返回errno 13, Permission denied错误
- 从零基础接触java第九章第二节
- iOS开发中App启动广告的功能
- 自己编写UNIX文件系统