- 浏览: 49342 次
文章分类
- 全部博客 (25)
- Android (19)
- startActivityForResult() (1)
- Intent (3)
- HTML (1)
- onCreate (1)
- Button (3)
- OnClick (3)
- Activity (2)
- savedInstanceState (1)
- Service (2)
- message (1)
- Notification (1)
- Broadcast (1)
- SQLite (1)
- SharePreferences (1)
- Galaxy 9300 (1)
- 刷机 (1)
- root (1)
- ContentProvider (1)
- 笔记本 (1)
- 散热 (1)
- 算法 (3)
- C (4)
- socket (0)
- java (0)
最新评论
ContentProvider
- 博客分类:
- Android
- ContentProvider
ContentProvider学习笔记
ContentProvider简介
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。
也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。
外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,
重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,
当然,中间也会涉及一些权限的问题。
Uri类简介
Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。
2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
• 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
• 要操作contact表中id为10的记录的name字段, contact/10/name
• 要操作contact表中的所有记录,可以构建这样的路径:/contact
如下:
· content://contacts/people/ 这个Uri指定的就是全部的联系人数据。
· content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。
在上边两个类中用到的Uri一般由3部分组成。
· 第一部分是方案:"content://" 这部分永远不变
· 第二部分是授权:"contacts"
· 第三部分是路径:"people/","people/1"(如果没有指定ID,那么表示返回全部)。
要操作的数据不一定来自数据库,也可以是文件等其他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码:
· Contacts.People.CONTENT_URI (联系人的URI)。
UriMatcher、ContentUrist和ContentResolver简介
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。
- UriMatcher
UriMatcher:用于匹配Uri。
1.首先把你需要匹配Uri路径全部给注册上,注册如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回匹配码为1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路径,返回匹配码为2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符
2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码
- ContentUris
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
1、 withAppendedId(uri, id)用于为路径加上ID部分
2、 parseId(uri)方法用于从路径中获取ID部分
- ContentResolver
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver使用insert、delete、update、query方法,来操作数据。
· query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。
· insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。
· update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。
· delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。
参考帖子连接:
http://www.cnblogs.com/chenglong/articles/1892029.html
http://blog.csdn.net/hudashi/article/details/6929137
发表评论
-
Galaxy 9300 刷机和获取root权限
2012-08-08 14:19 1571刷机和ROOT是两个不同但是很类似的动作。 刷机应该就 ... -
SharedPreferences 存储
2012-07-27 20:02 893SharedPreferences是Android平台 ... -
SQLite 存储
2012-07-27 10:33 769SQLite是一种轻量级的,嵌入式的数据库系统,它占用的资源非 ... -
Android Broadcast 广播
2012-07-23 10:47 854从现实生活中理解广播机制 一听到广播我们第一感觉就会联 ... -
Status Notification
2012-07-22 18:12 1290Status Notification是作用是在页眉的位置,提 ... -
Android Message机制
2012-07-20 11:01 1173参考链接http://www.cnblogs.com/hnra ... -
Android Service之bindService()
2012-07-17 14:37 1152http://www.cnblogs.com/onlylitt ... -
Android Service 之StartService()
2012-07-17 10:25 11768Service是android 系统中的一种组件,它跟Acti ... -
Activity_savedInstanceState
2012-07-14 10:31 3969假设有两个Activity,分别是MainActivity,S ... -
Activity生命周期
2012-07-13 11:24 707Activity的生命周期图如上所示 用一个实例来测试 ... -
ButtonDemo_OnClick_2
2012-07-13 00:47 600public void onCreate(Bundle ... -
intentDemo_2
2012-07-13 00:45 729<manifest xmlns:android=& ... -
intentDemo_1
2012-07-13 00:45 583package com.test.intentdemo; ... -
ButtonDemo_OnClick_3
2012-07-13 00:45 579package com.test.buttondemo; ... -
ButtonDemo_OnClick_1
2012-07-12 22:51 796public class MainActivity ex ... -
Android开发——关于onCreate的解读
2012-07-12 22:48 590在AndroidManifest.xml文件中的< ... -
startActivityForResult()的用法
2012-07-12 22:43 1592参考链接:http://www.cnblogs.com/mub ... -
Intent传递数据从一个Activity到另一个Activity
2012-07-12 21:19 11805MainActivity package com.te ...
相关推荐
Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...
contentprovider
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
androdi ContentProvider和Uri详解
android 自定义 ContentProvider 以及 ContentResolver
两个apk之间通过Broadcast,BroadcastReceiver广播互相通信及ContentProvider监听数据库增删改查的变换
介绍ContentProvider使用方法,包括最简单的用法,一个项目中创建多个ContentProvider分别操作数据库表,以及一个ContentProvider操作多张数据库表的用法。
contentProvider 的使用以及总结
ContentProvider自定义以及使用系统ContentProvider
该文件中有两个应用,db应用通过ContentProvider对外提供数据共享,other应用提供测试代码对数据进行增删改查。 参考博客:http://blog.csdn.net/tan313/article/details/44338425
现在请数一数你的手机中一共有多少...这个时候Contentprovider就排上用场了,Contentprovider能够在各个app之间进行数据的共享和传递,让信息不再成为孤岛,从这个意义上讲,你还能有不去学习Contentprovider的理由吗?
android 数据库 以及自定义ContentProvider demo
ContentProvider 共享SharedPreferences 值
android contentprovider使用示例
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
contentProvider监听的例子
用SharePreferences作数据存储做了一个ContentProvider实现数据共享
Android知识点ContentProvider篇
AsyncQueryHandler及ContentProvider的使用,异步查询数据 显示在listview里面,及其常用的Adapter的用法,