- 浏览: 611275 次
文章分类
最新评论
-
q781253433:
qin ~.求demo看看~
Android之Widget -
zhongyuanceshi:
博主,没看到你的例子的Demo,共享下
Android之Widget
1、 ContentProvider简介
ContentProvider是不同应用程序之间进行数据交换的标准API,使用它一个程序可以把自己的数据暴露给其他的程序。
ContentProvider以某种Uri的形式对外提供数据,允许其他应用程序访问或修改数据。
外界对数据的操作也就是CRUD操作(In computing, CRUD is an acronym for create, retrieve, update, and delete. )
,
如果要实现暴露自己的数据的话,除了继承
ContentProvider外,还需要实现以下一些方法:insert(),delete(),update(),query(),getType(),onCreate()。
当外界访问 ContentProvider的数据时,会自动创建 ContentProvider,此时会立即回调 onCreate方法。
ContentProvider是单实例模式的,只会创建一个。
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法 ,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同。
如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。
而使用ContentProvider共享数据的好处是统一了数据访问方式
2、通过ContentProvider对外共享数据的步骤:
第一步 建立一个类继承ContentProvider并根据重写下面方法(下面的方法并不是都要实现) :
public class PersonContentProvider extends ContentProvider{
public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)
}
第二步 需要在AndroidManifest.xml使用<provider>对该ContentProvider进行配置 ,为了能让其他应用找到该ContentProvider , ContentProvider 采用了authorities(主机名/域名) 对它进行唯一标识。
<manifest .... >
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provider.personprovider"/>
</application>
</manifest>
注意:一旦应用继承了ContentProvider类,后面我们就会把这个应用称为ContentProvider(内容提供者)。
3、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
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
4、UriMatcher、ContentUrist和ContentResolver简介
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
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进行匹配,如果匹配就返回匹配码,匹配码是调用
addURI()方法传入的第三个参数,假设匹配
content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配
码为1。
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
• withAppendedId(uri, id)用于为路径加上ID部分
• parseId(uri)方法用于从路径中获取ID部分
ContentResolver:当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用
ContentResolver 类来完成,要获取ContentResolver
对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver使用insert、delete、update、query方法,来操作数据。
发表评论
-
Android之Fastboot、Recovery基础知识
2013-12-19 22:13 1011参考文章: http://blog.csdn.net/y9 ... -
Eclipse设置主题
2013-10-26 22:32 660下载自己喜欢的主题: http://eclipsec ... -
gitignore文件的配置
2013-09-24 15:29 1685gitignore文件在Android ... -
Eclipse安装Git插件
2013-09-24 14:20 730http://jiangli.easymorse.com/?p ... -
Eclipse像Xcode一样自动有提示
2013-09-05 17:04 11781. 打开Eclipse,然后打开“Preferences ... -
点九PNG技术
2013-04-16 13:26 844参考文章: http://blog.csdn.net/g ... -
Android ASE 脚本环境
2013-04-10 12:32 1152原文: http://blog.sina.com.cn/ ... -
android 按两次返回键退出
2012-12-25 20:01 1273package com.anjoyo.test; ... -
android混淆代码总结
2012-12-19 18:02 1484反编译工具下载地址:http://ishare.iask.si ... -
System.out.printf输出格式
2012-12-13 22:01 2154// 定义一些变量,用来格式化输出。 double ... -
Regex正则表达式的使用
2012-12-09 20:20 1740正则表达式是用来描述某些字符串规则的工具,可以用此规则来做 ... -
IOS&Android开发 使用特殊字体,使用自定义字体
2012-11-24 00:16 1520IOS开发: 原文链接:http://tieba.baidu ... -
AspectJ的安装和Eclipse的AJDT插件的配置
2012-11-19 15:21 4889安装AspectJ是为了正常使用软件MonkeyTalk 1 ... -
Mac配置android开发环境
2012-11-13 16:18 48一.Eclipse的下载 到网站:http ... -
RelativeLayout相关属性
2012-11-13 14:49 935android:layout_centerInP ... -
Android资源文件
2012-11-04 15:22 914res [res中共有10种文 ... -
activity的启动方式(launch mode)
2012-11-04 15:14 820其他很详细的参考:http://blog.csdn.net/b ... -
android分享功能的实现(分享到微博空间等)
2012-11-03 22:15 2167//Intent intent = new Inten ... -
Android开发环境配置
2012-11-03 20:04 8451、JDK安装: http://jing ... -
android intent和intent action大全
2012-09-13 20:25 1022android 中intent是经常要用到的。不管是页面 ...
相关推荐
ContentProvider 内容提供者完美示例.zip 经验证完全可行
ContentProvider远程数据操作(1.0).zip ContentProvider远程数据操作(1.0).zip ContentProvider远程数据操作(1.0).zip ContentProvider远程数据操作(1.0).zip ContentProvider远程数据操作(1.0).zip
ContentProvider(其它程序共享访问).zip
android开发contentprovider教学ppt(内部资料).pptx
主要是学习android的ContentProvider机制时写的测试代码,包括一个自定义内容提供者,还有一个其对应的读取示例。
即文件存储、SharedPreference 存储、数据库存储,而这三种方式只是程序内部共享与存储数据,要实现跨程序共享数据,就要使用 ContentProvider(内容提供者),将自己的数据共享给其它应用程序,但 ContentProvider ...
这个demo详细介绍了ContentProvider内容提供者的用法,详细介ContentProvider怎么进行数据处理,等一下用法,代码有注释,简明易懂
ContentProvider插件化解决方案.docx
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
有需求做一个ContentProvider,好久没用这东西有点遗忘,晚上在家做个简化版的练手,没有测试...可能有BUG...
Android入门_-_数据库支持(SQLite),_内容提供器(ContentProvider).doc
android 内容提供者 ContentProvider
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。
2.1.3 intent使用方法... .33 2.2 界面开发... ..35 2.2.1 界面元素... .35 2.2.2 布局的实现... ...36 2.2.3 事件响应... .37 2.2.4 应用软件代码结构... ...38 2.2.5 国际化的支持(多语言) ... ...39 2.2.6 常见...
本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下: PersonContentProvider内容提供者类 package com.ljq.db; import android.content.ContentProvider; import android....
该文件中有两个应用,db应用通过ContentProvider对外提供数据共享,other应用提供测试代码对数据进行增删改查。 参考博客:http://blog.csdn.net/tan313/article/details/44338425
Android移动应用开发中ContentProvider 单元主要内容.pdf 学习资料 复习资料 教学资源
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这是调用系统的内容题供者
本源码主要是演示Android ContentProvider组件的使用,借助一个写日记小程序来演示组件中各种方法的使用技巧,比如向日记本中插入一条数据,编辑当前数据内容、删除当前数据、查询cursor时候,感兴趣的那些条例如何...
本文实例讲述了Android编程使用内容提供者方式进行存储的方法。分享给大家供大家参考,具体如下: 内容提供者(ContentProvider)主要作用是对外共享数据,如果数据通过内容提供者对外共享了,那么其他应用就可以从...