内容提供者(ContentProvider)复习
来源:互联网 发布:淘宝hd注销后无法登陆 编辑:程序博客网 时间:2024/06/05 16:35
ContentProvider是不同应用程序之间进行数据交换的API,ContentProvider以某种Uri的形式对外提供数据,允许其它应用访问或修改数据,其它的应用程序使用ContentResolver根据Uri去访问指定的ContentProvider提供的数据。
下面看一下内容提供者的使用步骤:
- 定义一个内容提供者: 定义一个类继承ContentProvider,实现未实现的方法。
- 在清单文件里配置ContentProvider
- 定义一个uri的路径匹配器UriMatcher,在静态代码块中添加匹配规则
暴露需要暴露的增删改查方法
第一步:定义一个内容提供者: 定义一个类继承ContentProvider,实现未实现的方法(这里只对其它应用程序暴露了查询的方法,对应的uri为“content://com.study.myContentProvider/query”)
/** * Created by 春水碧于天 on 2017/1/16. */public class myContentProvider extends ContentProvider { private static final int QUERYSUCCESS = 0; private SQLiteOpenHelper dbHelper; //1.定义一个Uri的路径匹配器 private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH); //2.创建一个静态代码块,在这个里面添加一个uri(类初次加载的时候执行) static{ /** * 添加一个Uri进行匹配,返回一个code * authority:和清单文件里定义的authorities一样 path:自定义路径 code: * */ sURIMatcher.addURI("com.study.myContentProvider","query",QUERYSUCCESS); //可以添加多个Uri } /** * 内容提供者初始化的时候执行 * @return */ @Override public boolean onCreate() { dbHelper = new MySQLiteOpenHelper(getContext()); //初始化一个数据库的操作对象 return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { if(QUERYSUCCESS == sURIMatcher.match(uri)){ //进行路径匹配,根据返回码判断是否需要执行的业务逻辑 //路径匹配成功 SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("info", projection, selection, selectionArgs, null, null, sortOrder); return cursor; }else{ Log.i("tag","没有匹配上……"); return null; } } @Override public String getType(Uri uri) { //用于返回当前Uri所代表的数据的MIME类型 return null; } @Override public Uri insert(Uri uri, ContentValues values) { //根据该Uri插入对应的数据 return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) {//根据该Uri删除对应的数据 return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {//根据该Uri更新对应的数据 return 0; }}
- 在清单文件里配置ContentProvider
在application节点下进行如下配置
<provider <!--authorities可随意填写--> android:authorities="com.study.myContentProvider" android:name="com.example.studycontentprovider.myContentProvider" <!--true表示允许其它应用访问--> android:exported="true" />
这样,一个内容提供者的例子就写好了,一般来说ContentProvider是单例模式的,当多个应用程序通过ContentResolver来操作ContentProvider所提供的数据时,ContentResolver调用的数据操作会委托给同一个ContentProvider进行处理。
注:只要是通过内容提供者暴露出来的数据,其访问的方式都是一样的,就是通过内容解析者进行获取应用程序通过内容提供者暴露出来的数据。
下面实现一个简单的ContentResolver来获取上面的ContentProvider所提供的数据:
ContentResolver获取数据的核心代码:
Uri uri = Uri.parse("content://com.study.myContentProvider/query"); Cursor cursor = getContentResolver().query(uri,new String[]{"name","money"},null,null,null); while(cursor.moveToNext()){ String name = cursor.getString(0); String money = cursor.getString(1); Log.i("tag","Name:"+name+"Money:"+money); } cursor.close(); //使用完关闭游标
Uri uri = Uri.parse(“content://com.study.myContentProvider/query”);
这里的content://为协议名,固定写法。
可以看到成功的通过内容提供者查询到其它应用程序中私有的数据库中的数据。
- 内容提供者(ContentProvider)复习
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- 63.内容提供者ContentProvider--系统内容提供者(获取短信)
- android 复习之路之ContentProvider 内容提供者
- (android)内容提供者contentprovider(-)
- 使用ContentProvider(内容提供者)共享数据
- Android内容提供者 --ContentProvider(待写)
- 黑马程序员 ----------- 内容提供者(ContentProvider)
- Android组件之ContentProvider(内容提供者)
- 第九天 ContentProvider(内容提供者、接受者)
- android之ContentProvider(内容提供者)
- 内容提供者(ContentProvider)---获取联系人
- (原创)ContentProvider内容提供者入门
- ContentProvider内容提供者
- Android ContentProvider(内容提供者)
- ContentProvider 内容提供者
- ContentProvider内容提供者(一)
- Python 设置系统默认编码
- HBase 学习笔记
- 插入排序
- 【算法】程序猿不写代码是不对的5
- 数据结构顺序表应用3:元素位置互换之移位算法然而我的思路跟移位没关系
- 内容提供者(ContentProvider)复习
- IOS 将逻辑和视图分开 代码易读性和复用性大大增加
- 第一天,记录一下。
- 图论之图形的表示方法(二)- 相邻表法/邻接表法
- 【JavaEE】经典JAVA EE企业应用实战-读书笔记9
- 比阿里巴巴fastjson更快的解析方法!
- CF # 389 Santa Claus and a Place in a Class
- HTTP深入浅出 http请求
- 三个整数的排序