ContentProvider提供数据

在Android中,他的每个应用都是相互独立的,各自运行在自己的Dalvik虚拟机中,但现实使用中常常需要在多个应用之间进行数据交换,例如发短信需要获取联系人中的内容,QQ上传头像需要获取相册内容等等,Android为这种跨应用的数据交换提供了一个标准ContentProvider,用户实现自己的ContentProvider时,需要实现他规定的抽象方法:

public boolean onCreate():该方法在ContentProvider创建后会被调用,当其他应用第一次访问ContentProvider时,该ContentProvider会被创建出来,并立即回调该onCreate()方法。

         public Uri inert(Uri uri,ContentValues values):根据该Uri插入values对应的数据。

public int delete(Uri uri,String selection,String[] selectionArgs):根据Uri删除select条件所匹配的全部记录。

         public int update(Uri uri,ContentValues values ,String selection,String[] selectionArgs):根据Uri修改select条件所匹配的全部记录

public Cursor query(Uri uri ,String[] projection,String selection ,String[] selectionArgs,String sortOrder):根据Uri查询出select条件所匹配的全部记录,其中projection就是列明列表,表明只选择出指定的数据列。

public String getTypt(Uri uri)该方法用于返回当前Uri所代表的数据的MIME类型,如果该Uri对应数据可能包括多条数据,那么MIME类型字符串应该以vnd.android.cursor.dir/开头,如果该Uri对应的数据只包含一条记录,那么返回MIME类型字符串应该以vnd.android.cursor.item/开头。

什么是URI

上面每个方法都有一个Uri参数,那么Uri又是什么呢?

关于Uri的可以参考这两篇博文  http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

http://www.cnblogs.com/hust-ghtao/p/4724885.html

就以上面两个网址来说:

http://这个是URL的协议部分,只要通过http协议来访问网站,前面都是这个前缀。

www.cnblogs.com这个是域名,访问指定的网站,域名部分也是不变的

gaojing/archive/2012/02/04/2413626.htmlhust-ghtao/p/4724885.html这个就是网站资源部分,这个是动态改编的,访问者访问不同的资源,这个部分也会不同。

ContentProvider要求的Uri和URL类似,例如

         content://org.crazyit.providers.dictprovider/words

content://这个是android的contentprovider规定的,就像http://一样,提供ContentProvider和访问ContentProvider的默认协议就是content://

org.crazyit.providers.dictprovider这个类似于网址,系统通过这个名字找到你要操作哪个ContentProvider。

words这个是资源部分,访问者访问不同的资源时候,这里也是动态改变的。

可以使用Uri的静态方法parse()将字符串转换成一个Uri。

ContentResolver访问使用

通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider提供数据,另外一个应用程序使用ContentResolver来访问数据。

可以使用Context的getContentResolver()方法来获取ContentProvider对象

获得了ContentResolver对象之后,可以使用如下方法操作数据:

insert(Uri uri,ContentValues values):向Uri对应的ContentProvider中插入values对应的数据。

delete(Uri uri,String where,String[] selectionArgs):删除Uri对应的ContentProvider中where提交匹配的数据。

update(Uri uri,ContentValues values,String where ,String[] selectionArgs):更新Uri对应的ContentProvider中where提交匹配的数据。

query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder):查询Uri对应的ContentProvider中where提交匹配的数据。

参数说明:

projection:要查询的列名

selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”

selectionArgs:对应与selection语句占位符的值,值在数组的位置与占位符在语句中的位置必须一致,否则就会有异常

sortOrder:相当于select语句order by关键字后面的 部分

一般来说,ContentProvider是单例模式,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentProvider处理。

注册ContentProvider

在定义好ContentProvider之后,还需要在系统中注册这个ContentProvider,具体操作方法是在AndroidMainifest.xml文件中添加一个<provider>元素,需要注意的是,我们要设置这个元素的exported的值为true,表明这个ContentProvider可以向外部应用提供数据

Android笔记(五十四) Android四大组件之一——ContentProvider(一)的更多相关文章

  1. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  2. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  3. Android笔记(十四) Android中的基本组件——按钮

    Android中的按钮主要包括Button和ImageButton两种,Button继承自TextView,而ImageButton继承自ImageView.Button生成的按钮上显示文字,而Ima ...

  4. Android学习(十四) Service组件

    一.定义 运行在后台,没有页面,不可见.优先级高于Activity,当系统内存不足时,会先释放一些Activity.注意,Service同样是运行在主线程中,不能做一些耗时操作.如果一定要做一些耗时的 ...

  5. Android笔记三十四.Service综合实例二

    综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...

  6. Android笔记(七十四) 详解Intent

    我们最常使用Intent来实现Activity之间的转跳,最近做一个app用到从系统搜索图片的功能,使用到了intent的 setType 方法和 setAction 方法,网上搜索一番,发现实现转跳 ...

  7. Android笔记(六十六) android中的动画——XML文件定义属性动画

    除了直接在java代码中定义动画之外,还可以使用xml文件定义动画,以便重用. 如果想要使用XML来编写动画,首先要在res目录下面新建一个animator文件夹,所有属性动画的XML文件都应该存放在 ...

  8. Android笔记(十) Android中的布局——表格布局

    TableLayout运行我们使用表格的方式来排列控件,它的本质依然是线性布局.表格布局采用行.列的形式来管理控件,TableLayout并不需要明确的声明包含多少行多少列,而是通过添加TableRo ...

  9. Android之旅十四 android中的xml文件解析

    在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件: ...

  10. Android进阶(二十四)Android UI---界面开发推荐颜色

    Android UI---界面开发推荐颜色   在Android开发过程中,总要给app添加一些背景,个人认为使用纯色调便可以达到优雅的视觉效果. 补充一些常用的颜色值:colors.xml < ...

随机推荐

  1. odoo开发笔记--ValueError Expected singleton

    异常处理参考:https://stackoverflow.com/questions/31070640/valueerror-expected-singleton-odoo8 报错: ValueErr ...

  2. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  3. 转 zabbix debug and zabbix使用percona插件监控mysql

    ########## https://www.cnblogs.com/keithtt/p/8542987.html zabbix使用percona插件监控mysql   1.添加percona仓库. ...

  4. TWA那些事儿

    一.参考学习 https://developer.android.google.cn/studio/ https://juejin.im/post/5cf50755e51d455d850d3aa7

  5. 【视频开发】RTSP SERVER(基于live555)详细设计

    /* *本文基于LIVE555的嵌入式的RTSP流媒体服务器一个设计文档,个中细节现剖于此,有需者可参考指正,同时也方便后期自己查阅.(本版本是基于2011年的live555) 作者:llf_17@q ...

  6. 百练1724 ROADS

    总时间限制: 1000ms    内存限制: 65536kB 描述 N cities named with numbers 1 ... N are connected with one-way roa ...

  7. IP address '121.41.35.30' could not be resolved: Name or service not known解决方法

    IP address '121.41.35.30' could not be resolved: Name or service not known解决方法 添加如下 然后重启 即可解决<pre ...

  8. LeetCode 223. 矩形面积(Rectangle Area)

    223. 矩形面积 223. Rectangle Area 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. LeetCode2 ...

  9. adb常用命令总结

    针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中. And ...

  10. 【C++札记】标准输入与输出

    概述 C语言中使用函数scanf和printf作为标准输入和输出,在C++中引入了类cin和cout进行标准输入和输出,所需头文件为<iostream>,命名空间是std.这里所说的标准输 ...