Android四大组件之:ContentProvider
来源:互联网 发布:重庆大学网络教育官网 编辑:程序博客网 时间:2024/06/08 01:28
每日一搏之Android四大组件之:ContentProvider
今天是Android四大组件的最后一篇啦!有点小成就,有点小激动。废话少说,进入主题。
ContentProvider中文:内容提供者。字面意识就是把自己的内容提供给被人的人。在Android中的意思就是把app自己的数据提供给其他app,或者说共享给其他app。共享的权限可以自己设置,主要有增删改查。比如现在很多app可以获取到手机联系人或者获取到手机里面的图片。那么提供联系人的就做内容提供者,而去获取这些内容的叫做内容解析者。
下面通过一个Dome来认识这个组件。
今天的案例没有界面,主要有以上几个java类,DbHelper 这里类是一个SQLite 的实现,主要就是创建一个表,具体的就不在这里讲了,大家可以下载Dome。
MainActivity 这个是app的主类,今天没用到
MyContentProvider 这个是几天的主要内容,主要用来创建一个内容提供者和一些实现方法
MyTest 这个是一个测试类,因为用两个app来测试比较麻烦,所以我们可以用一个测试类来代替,实现测试类需要在AndroidManif.xml 中注册。
下面贴代码
<span style="font-family:FangSong_GB2312;font-size:14px;">//声明日志标识private static final String Tag = "MyContentProvider"; //声明一个SQLiteprivate DbHelper helper;//声明两个标识private static final int STUDENTS = 1; //表示对数据库进行多行操作private static final int STUDENT = 2; //表示对数据库进行单行操作//声明一个Uri管理类private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //UriMatcher.NO_MATCH 表示没有匹配的//为uriMatcher 添加两个静态的uristatic {uriMatcher.addURI("com.example.contentproviderdemo.MyContentProvider", //这里一个参数就是我们的内容提供者的标识"student", STUDENTS);uriMatcher.addURI("com.example.contentproviderdemo.MyContentProvider","student/#", STUDENT);}//获取Type//通过返回一个字符串,系统可以判断是进行多条操作还是单条操作@Overridepublic String getType(Uri uri) {int flag = uriMatcher.match(uri);switch (flag) {case STUDENT:return "vnd.android.cursor.item/student";case STUDENTS:return "vnd.android.cursor.dir/student";}return null;}//对数据库进行插入数据的操作@Overridepublic Uri insert(Uri uri, ContentValues values) {// insert into student values(?,?)Uri resultUri = null;int flag = uriMatcher.match(uri);switch (flag) {case STUDENTS:SQLiteDatabase database = helper.getWritableDatabase(); //创建数据库操作类long id = database.insert("student", null, values); resultUri = ContentUris.withAppendedId(uri, id); 这里需要返回一个uri类给其他app使用Log.i(Tag, resultUri.toString());return resultUri;}return null;}//创建内容提供者@Overridepublic boolean onCreate() {helper = new DbHelper(getContext()); //实例化SQLitereturn false;}</span>
这里我实现一个插入操作,其他查询,修改,删除都是差不多的,只要按照正常的SQLite操作基本都可以实现。
上面说到一个内容提供者的标识,是什么呢?系统中有很多内容提供者,那系统要如何区分它们呢?就想我们的身份证一样,系统通过这个标识才能找到这个内容提供者。
同时内容解析者也通过标识才能获取内容。
到这里就实现了内容提供者的创建,下面我们来实现一个测试类
<span style="font-family:FangSong_GB2312;font-size:14px;">public class MyTest extends AndroidTestCase {public void insertDB() {//创建一个内容解析者ContentResolver contentResolver = getContext().getContentResolver();//创建一个uri 使用content://+授权路径Uri uri = Uri.parse("content://com.example.contentproviderdemo.MyContentProvider/student");//创建插入的数据ContentValues values = new ContentValues();values.put("name", "张三");values.put("address", "北京");//内容解析者直接执行内容提供者中的已经定义好的方法contentResolver.insert(uri, values);}</span>
这是一个测试类,其中有用到一个uri。
Uri代表了要操作的数据,Uri主要包含了两部分信息
①需要操作的ContentProvider
②对ContentProvider中的什么数据进行操作
组成部分
①scheme:ContentProvider的scheme已经由Android所规定为content://
②主机名(Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。建议为公司域名,保持唯一性
③路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定:
要操作person表中id为10的记录
content://cn.xyCompany.providers.personProvider/person/10
要操作person表中id为10的记录的name字段
content://cn.xyCompany.providers.personProvider/person/10/name
要操作person表中的所有记录
content://cn.xyCompany.providers.personProvider/person
内容提供者的基本内容就是这些啦,这样看内容提供者好像没什么用啊。其实大有用处。比如现在很多手机可以直接获取到手机联系人,这个就是一个内容提供者的应用。好的,那么Android四大组件就到这里啦。接下来给我两天时间,我将写一个融合Android四大组件的小案例,大家敬请期待。
鄙人林小白,英文名:LinLitterWhite,Android领域的小小白,博文中有错的地方,欢迎大家指出!必将重谢!晚安
案例下载
- Android四大组件之ContentProvider
- android四大组件之ContentProvider
- android四大组件之 ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- android 四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- android四大组件之ContentProvider
- android四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之~~ContentProvider
- Android 四大组件之ContentProvider
- Android四大组件之ContentProvider
- Android四大组件之ContentProvider
- 浅谈数据库优化方面的经验
- lua学习(1)_____配置lua运行环境
- oracle 服务启动TNSLSNR.exe占用8080端口的问题
- codeforces-368 B. Bakery
- 英文求职信 规范
- Android四大组件之:ContentProvider
- 【Python】Python_learning7:Python中斐波那契数列三种写法
- PHP基本语法--php基础最详细教程
- 使用PHP发送邮件的两种方法
- TypeError: Cannot read property 'left' of undefined
- HLG-2186 铺地砖
- Who's in the Middle
- 在ARM上安装USB无线网卡驱动过程(8188eu)
- ubuntu sogoupinyin拼音安装