内容提供器(ContentResolver)---《第一行代码Android》笔记
来源:互联网 发布:linux grep -ef|ps 编辑:程序博客网 时间:2024/05/21 18:38
- 作用
- 基本用法
- 内容URI
- CRUD操作
- 创建自己的内容提供器
作用
1,使用现有的内容提供器读取或操作相应程序中的数据,比如电话薄、相册等
2,为我们的程序数据提供外部访问接口
基本用法
ContentResolver实例通过Context的getContentResolver()方法获取,然后调用该实例的insert()、update()、delete()、query()方法对数据进行操作。这些方法都需要传入内容URI实例作为参数。
内容URI
内容URI给内容提供器中的数据建立了唯一标识符,它有两部分构成:
- authority:用于对不同程序进行区分,一般以程序包名进行命名。例如一个程序包名为com.example.app,则该程序authority可以命名为com.example.app.provider
- path:用于区分不同的表,通常加到authority后面。例如表名为table1,则path可以命名为/table1。
然后用协议定义这个数据是URI,一般为content://
完整的URI例子:
content://com.example.app.provider/table1
content://com.example.app.provider/table2
URI的实例可以调用Uri.parse()方法得到:
Uri uri= Uri.parse("content://com.example.app.provider/table1");
CRUD操作
- insert(uri,ContentValues实例)
- update(uri,ContentValues实例,where,where中的值)
- delete(uri,where,where中的值)
- query(uri,指定查询的列,where,where中的值,排序)
创建自己的内容提供器
1,创建一个类去继承ContentProvider,并实现他的6个抽象方法。
package com.example.contactstest;import android.content.ContentProvider;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.net.Uri;import android.support.annotation.NonNull;import android.support.annotation.Nullable;public class MyProvider extends ContentProvider { private static UriMatcher uriMatcher; static { /** * UriMatcher类可以轻松实现匹配内容URI的功能。 * UriMatcher实例的addURI()方法接收三个参数: * authority * path * 自定义代码 * 然后调用UriMatcher实例的match()方法,该方法传入一个uri实例,这样就可以判断出调用方期望访问的是哪张表中的数据了 */ uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.example.app.provider","table1",0); uriMatcher.addURI("com.example.app.provider","table1/#",1); } //初始化时调用,通常在这里进行数据库创建和升级等操作,整个则返回true,失败返回false @Override public boolean onCreate() { return false; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) { switch (uriMatcher.match(uri)){ case 0: //查询table1表中所有数据 break; case 1: //查询table1表中单挑数据 break; default: break; } return null; } /** * 用户获取Uri对象所对应的MIME类型。MIME类型由三部分构成 * 必须以vnd开头 * 如果内容uri以路径结尾,则后接android.cursor.dir/,如果内容uri以id结尾,则后接android.cursor.item/结尾。 * 最后接上vnd.<authority>.<path> * 例如uri为:content://com.example.app.provider/table1 * 则MIME类型为:vnd.android.cursor.dir/vnd.com.example.app.provider.table1 * * uri为:content://com.example.app.provider/table1/1 * 则MIME类型为:vnd.android.cursor.item/vnd.com.example.app.provider.table1 * * @param uri * @return */ @Nullable @Override public String getType(@NonNull Uri uri) { switch (uriMatcher.match(uri)){ case 0: return "vnd.android.cursor.dir/vnd.com.example.app.provider.table1"; case 1: //查询table1表中单挑数据 return "vnd.android.cursor.item/vnd.com.example.app.provider.table1"; default: break; } return null; } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) { return null; } @Override public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) { return 0; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) { return 0; }}
阅读全文
0 0
- 内容提供器(ContentResolver)---《第一行代码Android》笔记
- Android第一行代码学习笔记五----内容提供器
- android 学习笔记 内容提供器ContentResolver
- [Android][第一行代码][第 7 章 内容提供器]
- 《第一行代码--Android》读书笔记之内容提供器
- 第一行代码-第7章 内容提供器
- 《第一行代码》读书笔记(十一)----内容提供器
- 第一行代码-7.1 内容提供器简介
- 第一行代码-7.3 创建自己的内容提供器
- 第一行代码 第7章 内容提供器 -- 运行时权限
- 第一行代码 第7章 内容提供器 --基本用法
- 第一行代码 第7章 内容提供器 --实现跨程序数据共享
- 《Android第一行代码》笔记
- 《第一行代码Android》笔记
- 《第一行代码--android》笔记
- android第一行代码笔记
- 《Android第一行代码》笔记
- 阅读郭林《第一行代码》的笔记——第7章 跨程序共享数据,探究内容提供器
- git关于文件权限修改引起的冲突及忽略文件权限的办法
- Java基本类型与引用类型
- adb无法使用,提示error: unknown host service的解决办法
- struts2如何对指定的方法进行验证?
- 洪水来袭,湖北700年古建筑屹立不倒,中国古代抗洪防涝建筑设计有多强?!
- 内容提供器(ContentResolver)---《第一行代码Android》笔记
- struts2默认能解决get和post提交方式的乱码问题吗?
- Linux 标准输入输出详解
- BZOJ 2648 SJY摆箱子
- SQL多表练习题
- mybatis系列教程(二)——spring整合mybatis
- 漫步最优化九——泰勒级数
- excel入门,如何玩转excel,你早该这么玩Excel笔记2
- Tinker源码分析