学习自:http://blog.csdn.net/worker90/article/details/7016430
ContentProvider概述:
Android四大组件之一,用于对应用程序中的数据的共享和操作,我们通过ContentProvider可以
对Android中的音频,视频,图片,联系人等 进行增删改查操作。
个人对ContentProvider的见解:
Android的数据存储方式总共有五种,Shared Preferences、网络存储、文件存储、外储存储、SQLite。
每个程序存储数据可能用到其中的一种。假如,我要对Android中的联系人进行操作,此时,我不知道
Android中联系人是用那种方式存储的。这就是个问题。 那么ContentProvider就能满足这个需求,
一个类继承了ContentProvider方法,就会重写此类的增删改查方法,而这些方法在每个程序内部编写。
所以就不会存在这一问题。要调用数据,直接操作ContentProvider就可以了。
如何实现ContentProvider
1.理解Uri Uri:通用资源标识符
A:前缀表明数据受控于一个内容提供者。它从不修改,也就是schema
B:是指在AndroidMainfest.xml中我们注册的provider中的android:authorities属性所对应的
C:具体操作于哪个条目
D:具体指定到哪个条目下的哪条记录
2.UriMatcher 用于uri的注册和匹配:
实例化:UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
方法:1.sMatcher.addURI(“com.jiahui.provider.myprovider”, “person”, 1);//匹配此uri,如果匹配成功则返回最后一个参数1
sMatcher.addURI(“com.jiahui.provider.myprovider”, “person/#”, 2);//匹配此uri,如果匹配成功则返回最后一个参数2
2.sMatcher.match(uri); 此方法会返回已经加入的addURI,比如上面两个,如果没有就会返回-1
3.ContentUris 用于在Uri后面追加一个ID或者解析出传入的Uri所带上的ID值
方法:1.public static long parseId (Uri contentUri) //从路径中获取ID部分
2.public static Uri withAppendedId (Uri contentUri, long id) //用于为路径加上ID部分
4.ContentResolver类:用于操作ContentProvider类
增:Uri url = Uri.parse("content://com.jiahui.provider.myprovider/person"); 、
ContentValues values = new ContentValues();
values.put("name", edtname.getText().toString());
values.put("age", edtage.getText().toString());
Uri result = this.getContentResolver().insert(url, values);
if (ContentUris.parseId(result)>0) {
sysou("添加成功");
}
删:Uri uri = Uri.parse(“content://com.jiahui.provider.myprovider/person/2”);
int result = contentResolver.delete(uri, null, null);
if (result >= 1) {
sysou("删除成功");
}
改:Uri uri = Uri.parse("content://com.jiahui.provider.myprovider/person/3");
ContentValues values = new ContentValues();
values.put("name", edt_item_name.getText().toString());
values.put("age", Integer.parseInt(edt_item_age.getText().toString()));
int result = contentResolver.update(uri, values, null, null);
if (result >= 1) {
sysou("修改成功");
}
查:Uri url = Uri.parse("content://com.jiahui.provider.myprovider/person");
Cursor cursor = context.getContentResolver().query(url, new String[] { "_id", "name", "age" }, null, null, "_id");