Android学习笔记9 ContentProvider & Loader
来源:互联网 发布:网络舆情监控设备 编辑:程序博客网 时间:2024/06/08 14:03
ContentProvider & Loader
- ContentProvider 内容提供者
- Loader 异步加载
ContentProvider 内容提供者
ContentProvider组件的作用是使本应用中私有的数据库的数据可以被外界访问
- URI
- ContentResolver
- 自定义ContentProvider
- 常用内部数据库
Uri
用于android资源定位
//内部格式:[Action]://{package}/[data]
ContentResolver
ContentResolver的作用是访问ContentProvider提供的内容
根据提供的参数对相应应用的数据库进行查询
主要方法:
Cursor ContentResolver.query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
- uri:数据库资源定位
- projection:要查询的行列表
- selection:条件语句(可包含?参数)
- selectionArgs:用于填充条件语句中的?
- sortOrder:排序规则
Uri ContentResolver.insert(Uri url, ContentValues values)
- Uri:数据库资源定位
- values:数据集合
- 返回值Uri:插入数据的定位Uri
int ContentResolver.update(Uri uri, ContentValues values, String where, String[] selectionArgs)
- Uri;数据库资源定位
- values:要更新的数据
- where:条件语句
- selectionArgs:用于填充条件语句中的问号
- 返回值int:更新的行数
int android.content.ContentResolver.delete(Uri url, String where, String[] selectionArgs)
- Uri:数据库资源定位
- where:条件语句
- selectionArgs:用于填充条件语句中的问号
- 返回值int:删除的行数
callUri = CallLog.Calls.CONTENT_URI; columns = new String[] { CallLog.Calls._ID, CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.TYPE }; // 使用ContentRessolver 访问拨号记录应用下的ContentProvider提供的数据库中表的数据 // 得到ContentResolver对象 ContentResolver contentResolver = getContentResolver(); // 查询资源,从Uri代表的表中进行查询 Cursor cursor = contentResolver.query(Uri, Columns, null, null,null);
自定义ContentProvider
有数据库是前提
流程
- 继承ContentProvider
- 声明ContentProvider
- 定义数据表标识CODE
- 为数据表初始化Uri
- 重写数据库操作方法
- 在AndroidManifest中注册组件
- 在AndroidManifest中注册权限
- 在AndroidManifest中声明权限
声明ContentProvier
//声明该ContentProvider的唯一标识--通常使用包名+数据库名--必须小写 public static final String AUTHORITY ="xxx";
定义数据表标识
//为该组件中可以被外界访问的数据库中的资源定义Code标识 public static final int CODE_USER = 1; public static final int CODE_ORDER = 8;
初始化数据表Uri
使用
UriMatcher
产生并存储Uri
在静态代码块中实现初始化
使用int UriMatcher.match(Uri)
对传进的Uri进行匹配,返回值为Uri对应数据表的CODE
static{ uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, "user", CODE_USER); uriMatcher.addURI(AUTHORITY, "order", CODE_ORDER); }
int code = uriMatcher.match(uri);
重写数据库操作方法
这些方法供ContentResolver调用
参数也由其提供
query()
insert()
update()
delete()
注册
<!-- 声明访问该组件的权限 --> <permission android:name="com.qianfeng.gp08_day25_contentprovider1.READ_WRITE"/> <!-- 使用该组件的权限 --> <uses-permission android:name="com.qianfeng.gp08_day25_contentprovider1.READ_WRITE"/> <!-- 注册 ContentProvider组件 android:authorities:声明该组件的唯一标识 android:permission:声明该组件的权限 android:exported="true":声明该组件可以被外界应用访问 --> <provider android:name="com.qianfeng.gp08_day25_contentprovider1.contentprovider.UserContentProvider" android:authorities="com.qianfeng.gp08_day25_contentprovider1.users" android:permission="com.qianfeng.gp08_day25_contentprovider1.READ_WRITE" android:exported="true" />
常用数据库
通话记录
CallLog.Calls.CONTENT_URICallLog.Calls._ID idCallLog.Calls.NUMBER 电话号码CallLog.Calls.DATE 日期CallLog.Calls.TYPE 类型
联系人
ContactsContract.Contacts.CONTENT_URIcom.android.providers.contacts/database/contacts2.db 联系人信息表:raw_contacts(_id,display_name.display_name_alt) 联系人数据表:data(_id,raw_contact_id(外键),data1,data2....data15,mimetype_id(数据类别外键)) 数据类别表:mimetypes(_id,mimetype)
Loader 异步加载
实现方法
- Activity或Fragment实现LoaderCallbacks,同时指定最后加载的结果(泛型)
- Activity或Fragment实现LoaderCallbacks中的回调方法
关键方法
回调方法均由主线程(UI)执行
onCreatLoader(int id,Bundle args)
:初始化LoaderonLoaderFinished(Loader<?> loader,? data)
:异步任务完成后回调onLoaderReset(Loader<?> loader)
:重置Loader时回调
//使用: getLoaderManager().initLoader(...); getLoaderManager().restartLoader(...);
CursorLoader
处理数据库查询任务的Loader,返回值查询结果的游标数据集Cursor
CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
Context
contextUri
:数据库定位projection
:要查询的行selection
:条件语句selectionArgs
:替换条件语句中的?sortOrder
:排序方式
0 0
- Android学习笔记9 ContentProvider & Loader
- android学习笔记---contentProvider
- Android学习笔记-ContentProvider
- Android学习笔记ContentProvider
- Android学习笔记ContentProvider
- Android学习笔记ContentProvider
- android loader学习笔记
- android学习笔记之ContentProvider
- android学习笔记之ContentProvider
- Android学习笔记 ContentProvider (转)
- Android学习笔记----自定义ContentProvider
- Android学习笔记8---ContentProvider
- Android学习笔记(七)ContentProvider
- Android应用开发学习笔记之ContentProvider
- Android学习笔记之ContentProvider自定义
- Android中的ContentProvider的学习笔记.
- Android学习笔记----ContentProvider基本用法
- Android学习笔记七之ContentProvider
- Palindrome Number
- VMWare虚拟机提示:"锁定文件失败,打不开磁盘"或“内部错误”的解决办法
- 带有Checked状态的ImageView
- 测试测试
- iOS 全局变量PCH文件的使用
- Android学习笔记9 ContentProvider & Loader
- UDP 配合 connect 的使用
- iOS之通知传值的使用
- 树莓派入门
- openstack 设置虚拟机软删除
- 常用正则表达式大全 (转)
- C++读写文件
- xcode合并模拟器和真机静态库的编译
- iOS开发中的网络请求