Android 组件ContentProvider
Android 组件ContentProvider
Android的数据存储有五种方式Shared Preferences、网络存储、文件存储、外储存储、SQLite,一般这些存储都仅仅是在单独的一个应用程序之中达到一个数据的共享,有时候我们须要操作其它应用程序的一些数据,比如常见系统里的通讯录,短信,照片等等,所以云存储,通讯录。艳照门等等就孕育而生了。ContentProvider能够理解成内容提供者。也能够理解为一个接口,就是提供了一个供外部訪问的接口。有的时候须要进行权限控制。
ContentProvider简单介绍
ContentProvider向我们提供了我们在应用程序之前共享数据的一种机制,而我们知道每个应用程序都是执行在不同的应用程序的。不同程序的之间数据共享是现实的须要。程序总不能使闭环的,Android中的ContentProvider外共享数据的优点是统一了数据的訪问方式。简单总结说下:
ContentProvider为存储和获取数据提供了统一的接口。ContentProvide对数据进行封装。不用关心数据存储的细节。使用表的形式来组织数据。
使用ContentProvider能够在不同的应用程序之间共享数据。
Android为常见的一些数据提供了默认的ContentProvider(包含音频、视频、图片和通讯录等)。
说到了ContentProvider这么多优点,不能不说下Uri(Universal Resource Identifier)注意不是URL。通用资源标识符,看个简单的读取联系人的Uri,content://contacts/people,
content://是前缀。固定的;contacts 主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者能够依据这个标识来调用。people 路径(path)表示我们要操作的数据,路径的构建依据业务而定。
自己定义ContentProvider
俗话说。欲善其事必先利其器,想要成为一个内容提供者,就先须要有数据,先建立一个SqlDbConncetion:
01.publicclassSqlDBConnection
extendsSQLiteOpenHelper {02. 03.privatestaticfinalString DbName ="Book.db";04.privatestaticintversion=1;05. 06.publicSqlDBConnection(Context context) {07.super(context, DbName,null, version);08.}09. 10.@Override11.publicvoidonCreate(SQLiteDatabase db) {12.// TODO Auto-generated method stub13.String sqlString="create table Book (id integer primary key autoincrement,Name nvarchar(200),Title
nvarchar(200))";14.db.execSQL(sqlString);15.}16. 17.@Override18.publicvoidonUpgrade(SQLiteDatabase db,intoldVersion,
intnewVersion) {19.// TODO Auto-generated method stub20.}21.}上篇文章讲的junit測试这个时候能够拿过来使用一下初始化下数据:
01.publicclassBookCase
extendsAndroidTestCase {02. 03.publicvoidIntial() {04.SqlDBConnection dbConnection =newSqlDBConnection(getContext());05.SQLiteDatabase sqlDataBase = dbConnection.getWritableDatabase();06.longrow =0;07.for(inti =
0; i <5; i++) {08.ContentValues values =newContentValues();09.values.put("Name","书籍"+i);10.values.put("Title","标题"+
i);11.row = sqlDataBase.insert("Book",null,
values);12.Log.i("BookCase","插入成功:"+
row);13.}14.}15.}前面是基础工作,这个时候就能够建立一个自己的ContentProvider:
主机名是须要自己去AndroidManifest.xml文件里自己配置的,要求是唯一的,最好是用包名就好:
1.<provider android:name="com.example.googlecontentprovider.MyContentProvider"2.android:authorities="com.example.googlecontentprovider.MyContentProvider"></provider>假设认为上面的那一串代码不是非常好理解,以下调用的时候我会分别解释。
ContentResolver的使用
方法写在一个应用程序中调用属于正常,在另外一个程序中调用该程序的方法就是类似于接口了,以下先看原来初始化的数据:

又一次新建一个Android測试项目,定义为BookCase,首先插入数据,定义一个Uri。这里面主机名就是上面定义的包名。book/insert与CONTENT_INSERT是相应的:
01.publicvoidbookInsert() {02.Uri uri = Uri04.ContentResolver resolver = getContext().getContentResolver();05.ContentValues values =newContentValues();06.values.put("Name","书籍5");07.values.put("Title","标题5");08.uri = resolver.insert(uri, values);09.Log.i("BookCase","Uri"+
uri);10.longid = ContentUris.parseId(uri);11.Log.i("BookCase","測试成功"+
id);12.}显示结果例如以下:

然后更新刚才插入的数据,相同的更具Code给Uri赋值,然后初始化一个ContentResolver。调用update方法:
01.publicvoidbookUpdate() {02.Uri uri = Uri04.ContentResolver resolver = getContext().getContentResolver();05.ContentValues values=newContentValues();06.values.put("Name","改动");07.intcount = resolver.update(uri, values," id=?
"
,newString[]{"10"});08.Log.i("BookCase","更新了"+
count + "行");09.}结果例如以下:

删除插入的数据:
01.publicvoidbookDelete() {02.Uri uri = Uri04.ContentResolver resolver = getContext().getContentResolver();05.String where =" id=?
"
;06.String[] argString = {"10"};07.intcount = resolver.delete(uri, where, argString);08.Log.i("BookCase","删除了"+
count + "行");09.}结果例如以下:

查询全部的数据:
01.publicvoidbookQuery() {02.Uri uri = Uri04.ContentResolver resolver = getContext().getContentResolver();05.Cursor cursor=resolver.query(uri,newString[]{"id","Name","Title"},null,null,null);06.if(cursor.getCount()>0) {07.while(cursor.moveToNext()) {08.intid=cursor.getInt(cursor.getColumnIndex("Id"));09.String nameString=cursor.getString(cursor.getColumnIndex("Name"));10.String titleString=cursor.getString(cursor.getColumnIndex("Title"));11.Log.i("BookCase", id+"---"+nameString+"---"+titleString);12.}13.}14. 15.}Log下的记录:

查询单条记录:
01.publicvoidbookQuerySingle() {02.Uri uri = Uri04.ContentResolver resolver = getContext().getContentResolver();05.uri=ContentUris.withAppendedId(uri,1);06.Cursor cursor=resolver.query(uri,newString[]{"id","Name","Title"},null,null,null);07.if(cursor.getCount()>0) {08.while(cursor.moveToNext()) {09.intid=cursor.getInt(cursor.getColumnIndex("Id"));10.String nameString=cursor.getString(cursor.getColumnIndex("Name"));11.String titleString=cursor.getString(cursor.getColumnIndex("Title"));12.Log.i("BookCase", id+"---"+nameString+"---"+titleString);13.}14.}15.}结果如图:

Android 组件ContentProvider的更多相关文章
- Android组件系列----ContentProvider内容提供者
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android组件的通讯——Intent
转载:Android组件的通讯-Intent 1.概述 一个应用程序的三个核心组件——activities.services.broadcast receivers,都是通过叫做intents的消息激 ...
- 23、从头学Android之ContentProvider .
http://blog.csdn.net/jiahui524/article/details/7016430 应用场景: 在Android官方指出的Android的数据存储方式总共有五种,分别是:Sh ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 【Android开发精要笔记】Android组件模型解析
Android组件模型解析 Android中的Mashup 将应用切分成不同类别的组件,通过统一的定位模型和接口标准将他们整合在一起,来共同完成某项任务.在Android的Mashup模式下,每个组件 ...
- Android之ContentProvider数据存储
一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...
- 2015最流行的Android组件、工具、框架大全
Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...
- Android组件化
附:Android组件化和插件化开发 App组件化与业务拆分那些事 Android项目架构之业务组件化 Android组件化核心之路由实现 Android组件化开发实践
- Android组件安全
今天在看有关Android组件安全的东西 1.Activity Android系统组件在指定Intent过滤器(intent-filter)后,默认是可以被外部程序(签名不同,用户ID不同)访问的,在 ...
随机推荐
- 将电脑浏览器User-Agent识别改成手机浏览器UA几种简单方法
第一种方法:修改浏览器的快捷方式 右击桌面上的Chrome浏览器图标,在弹出的右键菜单中选择“复制”,复制一个图标副本到桌面.右击该副本,选择“属性”,打开相应的对话框,在“目标”文本框的字符后面添加 ...
- 关闭掉eclipse启动的自动更新功能(提高打开eclipse的速度)
- CSS——font
行高的量取方式: 1.第一行可设置margin-top值.然后将第一文字顶部到第二行文字顶部的值作为行高的值(要注意对齐方式) 2.将 3.电视上 font:12px/1.5//字体12px,行高1. ...
- JS——indexOf replace search
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 注释:indexOf() 方法对大小写敏感!如果要检索的字符串值没有出现,则该方法返回 -1. 语法:searchvalue, ...
- CentOS 7 使用 yum 安装 MariaDB 与 MariaDB 的简单配置
闲置已久的空间环境配置忘得差不多了,今天得空整理,重置了磁盘重新搭建环境,首先安装MariaDB的数据库,在这里记录下安装过程,以便以后查看. 1.安装MariaDB 安装命令 yum -y inst ...
- C# 获取表中最大值
; if (db.LPicture.Any()) { // LPicture Newmode = db.LPicture.Where(n => ).FirstOrDefault(); start ...
- seam remote 返回的map结构
map结构的数据,js接收到的结构是elements下面的一个 [ {key:***,value:***}, {key:***,value:***} ] 这样子的集合,需要经过下面代码的转换才能重新变 ...
- 新建springcloud 找不到请求路径
新建 启动类 controller 都不可以直接放在 java 目录下 否则启动失败
- HUD 1426 Sudoku Killer (DFS)
链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...
- rsync全网备份
rsync备份企业方案 企业有Linux服务器又有windows服务器,备份用rsync(服务端),Linux(客户端),Windows(客户端,cwrsync,旧版本有免费版)打包压缩数据往服务器上 ...