Android学习笔记9 ContentProvider & Loader
2015-10-15 10:21
591 查看
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_URI CallLog.Calls._ID id CallLog.Calls.NUMBER 电话号码 CallLog.Calls.DATE 日期 CallLog.Calls.TYPE 类型
联系人
ContactsContract.Contacts.CONTENT_URI com.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):初始化Loader
onLoaderFinished(Loader<?> loader,? data):异步任务完成后回调
onLoaderReset(Loader<?> loader):重置Loader时回调
//使用: getLoaderManager().initLoader(...); getLoaderManager().restartLoader(...);
CursorLoader
处理数据库查询任务的Loader,返回值查询结果的游标数据集CursorCursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
Contextcontext
Uri:数据库定位
projection:要查询的行
selection:条件语句
selectionArgs:替换条件语句中的?
sortOrder:排序方式
相关文章推荐
- android DexClassLoader动态加载技术详解
- Windows环境下Android Studio v1.0安装教程
- Android布局中权重设置问题
- Android各种访问权限Permission详解
- android listview中item通过viewpager实现《IT蓝豹》
- android listview中item通过viewpager实现
- Android数据持久化存储-Files对象
- CircularCounter 双层原形进度条效果《IT蓝豹》
- android错误:Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- Android 创建文件夹,文件的一些注意细节
- 安卓两个活动间传递数据
- 极光推送---JPush---服务器端和android端怎么做
- 可升级Android 6.0机型一览 小米手机亮了
- Android Studio快捷键提高工作效率的奇技
- HTML开发android应用之软件的安装
- 解决Android Button 字母自动全部大写的问题
- android获取通讯录信息
- Android之NDK开发
- 调用android平台功能-拨号,地图,网页,短信,Email,播放多媒体
- 对 Android 开发者有益的 40 条优化建