赞
踩
// b. 若ContentProvider的数据存储方式是内存,则需要自己实现线程同步
<-- 2个其他方法 -->
public boolean onCreate()
// ContentProvider创建后 或 打开系统后其它进程第一次访问该ContentProvider时 由系统进行调用
// 注:运行在ContentProvider进程的主线程,故不能做耗时操作
public String getType(Uri uri)
// 得到数据类型,即返回当前 Url 所代表数据的MIME类型
Android
为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider
但也可根据需求自定义ContentProvider,但上述6个方法必须重写
本文主要讲解自定义
ContentProvider
ContentProvider
类并不会直接与外部进程交互,而是通过ContentResolver
类4.41 作用
统一管理不同 ContentProvider
间的操作
- 通过
URI
即可操作 不同的ContentProvider
中的数据- 外部进程通过
ContentResolver
类 从而与ContentProvider
类进行交互
4.2 为什么要使用通过ContentResolver
类从而与ContentProvider
类进行交互,而不直接访问ContentProvider
类?
ContentProvider
,若需要了解每个ContentProvider
的不同实现从而再完成数据交互,操作成本高 & 难度大ContentProvider
类上加多了一个 ContentResolver
类对所有的ContentProvider
进行统一管理。4.3 具体使用
ContentResolver
类提供了与ContentProvider
类相同名字 & 作用的4个方法
// 外部进程向 ContentProvider 中添加数据
public Uri insert(Uri uri, ContentValues values)
// 外部进程 删除 ContentProvider 中的数据
public int delete(Uri uri, String selection, String[] selectionArgs)
// 外部进程更新 ContentProvider 中的数据
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
// 外部应用 获取 ContentProvider 中的数据
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
// 使用ContentResolver前,需要先获取ContentResolver
// 可通过在所有继承Context的类中 通过调用getContentResolver()来获得ContentResolver
ContentResolver resolver = getContentResolver();
// 设置ContentProvider的URI
Uri uri = Uri.parse(“content://cn.scu.myprovider/user”);
// 根据URI 操作 ContentProvider中的数据
// 此处是获取ContentProvider中 user表的所有记录
Cursor cursor = resolver.query(uri, null, null, null, “userid desc”);
Android
提供了3个用于辅助ContentProvide
的工具类:
ContentUris
UriMatcher
ContentObserver
URI
withAppendedId()
&parseId()
// withAppendedId()作用:向URI追加一个id
Uri uri = Uri.parse(“content://cn.scu.myprovider/user”)
Uri resultUri = ContentUris.withAppendedId(uri, 7);
// 最终生成后的Uri为:content://cn.scu.myprovider/user/7
// parseId()作用:从URL中获取ID
Uri uri = Uri.parse(“content://cn.scu.myprovider/user/7”)
long personid = ContentUris.parseId(uri);
//获取的结果为:7
ContentProvider
中注册URI
URI
匹配 ContentProvider
中对应的数据表// 步骤1:初始化UriMatcher对象
UriMatcher matcher = new UriMatcher(UriMatcher.NO_M
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。