android数据存储读取6:contentProvider的使用(提供自己应用的数据)
2015-06-11 11:10
555 查看
contentprovider 可以提供应用的数据供其它的应用使用。同时也可以利用它访问其它的应用。比如访问手机短信、手机Music、联系人等等。优点在于提供了公共的、统一的数据访问接口。
也就是说 别的应用调用 固定的都有增删改查方法
ContentProvider的使用大致可以分为下面几个部分:
首先我们需要定义一个类继承ContentProvider
public class PersonContentProvider
extends
ContentProvider
(1)在类中定义一个静态代码块,实现UIR等的初始化设置
static {
uriMatcher =
new UriMatcher(UriMatcher.NO_MATCH);
// 添加一些uri(分机号)
uriMatcher.addURI(AUTHORITY,
"person/insert",
PRESON_INSERT_CODE);
}
"person/insert" 这个person名字一般是数据库的名字,当然用其它名字也可以。后面的insert一般取方法名字。
(2)实现insert方法 (首先要通过URI匹配权限是否正确)然欧才能对数据库进行操作
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case
PRESON_INSERT_CODE:
SQLiteDatabase db =
mOpenHelper.getWritableDatabase();
if(db.isOpen()) {
long id = db.insert("person",
null, values);
db.close();
return ContentUris.withAppendedId(uri, id);
}
break;
default:
throw
new IllegalArgumentException("uri不匹配: " + uri);
}
return
null;
}
(3)manifester中注册使用权限
<provider
android:name=".providers.PersonContentProvider"
android:authorities="包名.PersonContentProvider"
android:readPermission="aa.bb.cc.read"
android:writePermission="aa.bb.cc.write"
>
</provider>
第三方应用使用数据的时候:
(1)manifester中权限声明
<uses-permission
android:name="aa.bb.cc.read"/>
<uses-permission
android:name="aa.bb.cc.write"/>
(2)创建内容提供者对象。调用公共Insert方法,插入对象。根据URI查找对象所在的位置
Uri uri = Uri.parse("content://包名.PersonContentProvider/person/insert");
// 内容提供者访问对象
ContentResolver resolver = getContext().getContentResolver();
ContentValues values =
new ContentValues();
values.put("name",
"fengjie");
values.put("age", 90);
uri = resolver.insert(uri, values);
也就是说 别的应用调用 固定的都有增删改查方法
ContentProvider的使用大致可以分为下面几个部分:
首先我们需要定义一个类继承ContentProvider
public class PersonContentProvider
extends
ContentProvider
(1)在类中定义一个静态代码块,实现UIR等的初始化设置
static {
uriMatcher =
new UriMatcher(UriMatcher.NO_MATCH);
// 添加一些uri(分机号)
uriMatcher.addURI(AUTHORITY,
"person/insert",
PRESON_INSERT_CODE);
}
"person/insert" 这个person名字一般是数据库的名字,当然用其它名字也可以。后面的insert一般取方法名字。
(2)实现insert方法 (首先要通过URI匹配权限是否正确)然欧才能对数据库进行操作
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case
PRESON_INSERT_CODE:
SQLiteDatabase db =
mOpenHelper.getWritableDatabase();
if(db.isOpen()) {
long id = db.insert("person",
null, values);
db.close();
return ContentUris.withAppendedId(uri, id);
}
break;
default:
throw
new IllegalArgumentException("uri不匹配: " + uri);
}
return
null;
}
(3)manifester中注册使用权限
<provider
android:name=".providers.PersonContentProvider"
android:authorities="包名.PersonContentProvider"
android:readPermission="aa.bb.cc.read"
android:writePermission="aa.bb.cc.write"
>
</provider>
第三方应用使用数据的时候:
(1)manifester中权限声明
<uses-permission
android:name="aa.bb.cc.read"/>
<uses-permission
android:name="aa.bb.cc.write"/>
(2)创建内容提供者对象。调用公共Insert方法,插入对象。根据URI查找对象所在的位置
Uri uri = Uri.parse("content://包名.PersonContentProvider/person/insert");
// 内容提供者访问对象
ContentResolver resolver = getContext().getContentResolver();
ContentValues values =
new ContentValues();
values.put("name",
"fengjie");
values.put("age", 90);
uri = resolver.insert(uri, values);
相关文章推荐
- 判断Android程序是否在前台运行的两种方法
- Android自动化测试总结
- Android中SharedPreferences的使用
- [Android] 环境配置之Android Studio开发NDK
- Android官方文档-Bound Services(绑定服务)
- Android 里面的多线程操作备忘,关于Thread,Handler, Looper
- Android官方文档-Services(服务)
- Android 从入门到精通 第七章 事件
- [Android][Activity] XML parse
- Android中ExpandableListView的使用
- android调用系统相机并调整照片大小保存,最后上传照片
- Android自定义DataTimePicker(日期选择器)
- android布局属性详解
- Android Root原理初探
- Picasso ——针对 Android的一个强大的图像下载和缓存库
- Android Touch事件传递机制解析
- Android中moveTo、lineTo、quadTo、cubicTo、arcTo详解(实例)
- Android中fragment嵌套fragment问题解决方法
- Android程序:使用SeekBar实现滑动进度条功能
- Android的Looper,Handler以及线程间的通信