2022年ContentProvider实例 .pdf

上传人:Che****ry 文档编号:27253397 上传时间:2022-07-23 格式:PDF 页数:5 大小:46.29KB
返回 下载 相关 举报
2022年ContentProvider实例 .pdf_第1页
第1页 / 共5页
2022年ContentProvider实例 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年ContentProvider实例 .pdf》由会员分享,可在线阅读,更多相关《2022年ContentProvider实例 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、在在 Content provider实现中使用 SQLiteOpenHelper 中实现的是特别简单的content provider,方法实现不全。下面给出一个实现比较全面的Content provider ,当然也是很简单的。使用 UriMatcher UriMatcher 可以帮助开发者识别Uri 。比如:content:/com.easymorse.cp.mycp/emperors 表示获取朝代列表集合。而:content:/com.easymorse.cp.mycp/emperors/1 表示其中的 _ID 值为 1 的一个特定的记录。如果自己写分析 Uri 的代码,比较繁琐和重复

2、。android 提供了方便的工具类UriMatcher 。首先定义两个常量,针对集合与特定的单条记录:private static final int ITEMS = 1; private static final int ITEM = 2; 另外要创建 UriMatcher 实例:private static UriMatcher uriMatcher; static uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(PROVIDER_NAME, TABLE_EMPERORS, ITEMS); uriMa

3、tcher.addURI(PROVIDER_NAME, TABLE_EMPERORS + /#, ITEM); 静态即可。然后在静态初始化块中把ITEMS和 ITEM加进去。这里指定了ITEMS的 URI模式是:content:/com.easymorse.cp.mycp/emperors 而 ITEM是:content:/com.easymorse.cp.mycp/emperors/# #号表示一个 id 值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 -

4、- - - - - - - - UriMatcher 如何使用呢?uriMatcher.match(uri) 如果一个 content:/com.easymorse.cp.mycp/emperors Uri,该方法将返回 1,也就是常量 ITEMS的值,以此类推。编写一个 getType 方法:Override public String getType(Uri uri) switch (uriMatcher.match(uri) case ITEMS: return vnd.android.cursor.dir/vnd.easymorse.mycp; case ITEM: return vn

5、d.android.cursor.item/vnd.easymorse.mycp; default: throw new IllegalArgumentException(Unsupported URI: + uri); 这个方法在本例中并未起到作用,如果作为intent并使用 data(Mimetype)就会用到这个方法。可见 总结一下 Intent概念的 data 测试部分。编写查询方法查询方法的代码:Override public Cursor query(Uri uri, String projection, String selection, String selectionArgs

6、, String sortOrder) switch (uriMatcher.match(uri) case ITEMS: return database.query(TABLE_EMPERORS, projection, selection, selectionArgs, null, null, sortOrder); case ITEM: return database.query(TABLE_EMPERORS, projection, _ID + = + uri.getPathSegments().get(1), selectionArgs, null, null, null); def

7、ault: throw new IllegalArgumentException(unknown uri: + uri); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 这里有两种可能,通过条件查询,或者通过 id 查询,前者走 ITEMS , 后者走 ITEM ,都是通过 Uri 判断的,借助 UriMatcher 。这里:uri.getPathSegments().get(1), 将取到 id 号。如果 get(0) ,将

8、取到 path 的第一个值 emperors。使用该 Content provider的代码:private String getContentProviderValues() StringBuilder builder = new StringBuilder(); / 查名称和朝代,朝代 =明,而且按照登基时间倒排序 Cursor cursor = managedQuery(MyContentProvider.CONTENT_URI, new String MyContentProvider.NAME, MyContentProvider.DYNASTY , MyContentProvide

9、r.DYNASTY + =?, new String 明 , start_year desc); / 查全部记录 / Cursor cursor = managedQuery(MyContentProvider.CONTENT_URI, null, / null, / null, null); / 根据 id 定位记录( 0.1 ) / Cursor cursor = managedQuery(ContentUris.withAppendedId( / MyContentProvider.CONTENT_URI, 1), / new String MyContentProvider.NAME

10、, null, null, null); while (cursor.moveToNext() builder .append( cursor.getString(cursor .getColumnIndex(MyContentProvider.NAME) .append( | ) / .append( / cursor / .getString(cursor / .getColumnIndex(MyContentProvider.START_YEAR) / .append( | ) .append( cursor.getString(cursor 名师资料总结 - - -精品资料欢迎下载 -

11、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - .getColumnIndex(MyContentProvider.DYNASTY) .append(n); 可以有多种使用方式,本例中屏蔽部分,是其他使用方式。编写编辑方法insert()、update() 和 delete()都属于编辑记录的功能。拿update 举例,因为比较复杂一点:Override public int update(Uri uri, ContentValues contentValues, Str

12、ing selection, String selectionArgs) switch (uriMatcher.match(uri) case ITEM: return database.update(TABLE_EMPERORS, contentValues, _ID + = + uri.getPathSegments().get(1) + and ( + selection + ), selectionArgs); case ITEMS: return database.update(TABLE_EMPERORS, contentValues, selection, selectionAr

13、gs); default: throw new IllegalArgumentException(unknown uri: + uri); 这里复杂的地方是如果根据id 做修改,比如还有其他附加条件, 需要拼接 where子句字符串。后面的and 要带括号,否则逻辑可能不同。使用这个 Content provider的做 update 的示例:ContentValues values = new ContentValues(); values.put(MyContentProvider.NAME, 朱重八 ); getContentResolver().update(MyContentProv

14、ider.CONTENT_URI, values, MyContentProvider.NAME + =?, new String 朱元璋 ); 修改表中是 朱元璋 的,改为他的小名,朱重八。如果是 delete 和 insert操作,情况是类似的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁