内容提供者:
必须在清单文件中注册,不需要手动执行,通过内容解决者匹配对应的uri调用对应内容提供者中的增删改查方法,在内容提供者中,事先利用匹配器,匹配一些uri,只有这些uri才能操作该内容提供者。
1、在清单文件中注册
<provider android:name="com.lmj.lianxiren02.MyContentProvider"
android:authorities="com.lmj.lianxiren02.MyContentProvider"
android:exported="true"/>
Authorities:主机名,也就是访问这个内容提供者的地址。
2、继承ContentPrivoder
Public class MyContentProvider extends ContentProvider
3、定义匹配器
// 如果没有匹配到就返回-1
static UriMatcher matcher = new UriMatcher(-1);
static String authority = "com.lmj.lianxiren02.MyContentProvider";
static int INSERT_CODE = 1;
static int Del_CODE = 2;
static int Up_CODE = 3;
static int Sel_CODE=4;
private MySqliteHelper helper;
// 在匹配器中,定义一些能匹配到的uri
static {
// 往friend表中插入一条数据的uri
// content://com.lmj.lianxiren02.MyContentProvider/friend
matcher.addURI(authority, "friend", INSERT_CODE);
// 匹配删除操作的uri
matcher.addURI(authority, "friend_delete", Del_CODE);
// 匹配更新的操作的uri
matcher.addURI(authority, "friend_update", Up_CODE);
// 匹配查询的uri
matcher.addURI(authority, "friend_select", Sel_CODE);
}
4、覆写oncreate方法,第一次创建内容提供者的时候得到helper对象,利用helper来操作数据库。
@Override
public boolean onCreate() {
// 第一次创建内容提供者的时候,得到helper对象
// 第一个参数上下文,四大组件都可以得到上下文
helper = new MySqliteHelper(this.getContext(), "tongxunlu.db", null, 1);
return true;
}
5、覆写增删改查数据库的方法
@Override
public Uri insert(Uri uri, ContentValues values) {
// 判断uri是否符合规范,如果返回的不是1,说明uri不正确
if (matcher.match(uri) != 1) {
throw new IllegalArgumentException("uri不合法" + uri);
} else {
SQLiteDatabase sdb = helper.getWritableDatabase();
if (sdb == null) {
throw new IllegalArgumentException("无法插入");
} else {
// 返回插入的这条数据,在数据库中的id
Long id = sdb.insert("friend", "_id", values);
sdb.close();
uri = ContentUris.withAppendedId(uri, id);
// 将这个uri返回给调用者
// com.lmj.lianxiren02.MyContentProvider/friend/id
//参数2一般设置为null
//给所有注册了内容观察者的resolver发送一个提醒
this.getContext().getContentResolver().notifyChange(uri, null);
return uri;
}
}
}
6、调用内容提供者的增删改查方法
内容解决者:
ContentResolver resolver=this.getContentResolver();
resolver.insert(uri, values);
内容解决者调用insert会调用它指定uri对应的内容提供者的insert方法,内容提供者的insert方法执行插入数据库的操作。
相关推荐
android 内容提供者 安卓 初级 老鸟勿入
Android 内容提供者、解释者和观察者小例子 两个个程序源码
android 内容提供者 ContentProvider
android内容提供者获取通讯录,获取短信。
Android项目实战--手机卫士26--内容提供者与内容观察者
简单Android中的内容提供者实例,带数据库操作。
Android通过内容提供者读取联系人,手机上必须要有联系人数据,也可以直接在真机上运行
NULL 博文链接:https://justsee.iteye.com/blog/936612
本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下: PersonContentProvider内容提供者类 package com.ljq.db; import android.content.ContentProvider; import android....
使用android通讯录中的内容提供者,实现查询和增加联系人。经测试,可用
android的内容提供者contentprovider的应用, 采用ContentProvider对外共享数据和监听ContentProvider中数据的变化
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。
该资源包含两个工程,一个是ContentProvider的Demo资源,另一个是ContentResolver的Demo资源。本资源旨在为入门者提供一个完整的事例。
自定义内容提供者,和调用系统联系人 ,android
NULL 博文链接:https://2528.iteye.com/blog/1062079
这个demo详细介绍了ContentProvider内容提供者的用法,详细介ContentProvider怎么进行数据处理,等一下用法,代码有注释,简明易懂