博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ContentProvider初步-------------------笔记
阅读量:4540 次
发布时间:2019-06-08

本文共 1933 字,大约阅读时间需要 6 分钟。

Provider

查阅文档,重点功能是在不同的应用程序之间共享数据,很少去实现它,大部分是使用android内部的Content provider
(一)基本概念
(1)为存储或获取数据提供了统一的接口
(2)可以在不同的应用程序之间共享数据
(3)android 为常见的一些数据提供了 ContentProvider(包括音频图片动画通讯录等)
URI为每一个ContentProvider所共有,用于表示ContentProvider所提供的数据,一个应用对应一个ContentProvider,外部通过CONTENT_URI来获取自身提供的数据(数据模型ContentProvider使用表的形式来组织数据)
ContentProvider提供的函数:
query,insert,update,delete,getType,onCreate
(二)实现ContentProvider过程:
(1)定义CONTENT_URI常量
必须是唯一的 public static final Uri CONTENT_URI = Uri.parse("content://带包名的完整的类名");
(要是存在很多表应为每一个子表定义一个CONTENT_URI,并且表中必须存在一个名为_id的列)
数据类型
读取整个表中的数据:"vnd.android.cursor.dir/名字"、
读取某一个列的数据:"vnd.android.cursor.item/名字"
(2)定义一个类,继承ContentProvider
在其中定义一个UriMatcher对象用于检查URI是否合法,具体实现参看Contact类的ContentPrivider,根据其实现方法自定义一个检查机制
(3)实现query,insert,update,delete,getType,onCreate方法
uriMatcher.match(uri)返回相应的int值
insert方法:
参数: Uri uri ,ContentValues values(键值对)
返回值:Uri(表示干刚使用这个函数所插入的数据)
dh = new DataBaseHelper(getContext(),FirstProviderMetaData.DATABASE_NAME)
SQLiteDatabase db = dh.getWriteDatabase();//获得可写的SQLite数据库
long rowId = db.insert(UserTableMetaData.TABLE_NAME,null,values)//执行查询方法,返回刚插入记录的ID
Uri uri = ContentUris.withAppendId(UserTableMetaData.CONTENT_URI,rowId);//把新生成的ID追加到ContentURI后面
getContext().getContentResolver.notifyChange(insertedUserUri,null);//通知监听器数据已经改变
return  uri
query方法:
参数Uri,projection,selection,selectionArgs,oderBy
返回值:Cursor对象
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();//使用SQLiteQueryBuilder类创建一个查询的语句
qb.setTables(表名);
qb.setProjectionMap(HashMap对象);//将事先添加好的键值对添加到qb子句中
qb.appendWhere(where子句)
(查找函数uri.getPathSegments()的具体功能)
Cursor c = qb.query(db,projection,selection,selectionArgs,null,null,oderBy)
c.setNotificationUri(getContext.getContentResolver(),uri);//通知监听器数据已经查询成功
(4)在AndroidManifest.xml中进行声明
<provider android:name="类名全称"
android:authorities="URI中间的字串"/>
URI中间的字串:如content://authority/名称中的authority

转载于:https://www.cnblogs.com/Gaojiecai/archive/2011/08/13/2136887.html

你可能感兴趣的文章
Boost库编译安装
查看>>
算法复习——数位dp(不要62HUD2089)
查看>>
Spark2.1.0——运行环境准备
查看>>
noip模拟赛 寻宝之后
查看>>
ZOJ2833*(并查集)
查看>>
外连接简要总结
查看>>
第一次作业-准备篇
查看>>
【C++】继承时构造函数和析构函数
查看>>
opencv源代码之中的一个:cvboost.cpp
查看>>
swift
查看>>
pycharm 快捷键
查看>>
Linux常用命令
查看>>
.net中的设计模式---单例模式
查看>>
安装程序工具 (Installutil.exe)22
查看>>
如何简单解释 MapReduce算法
查看>>
面向接口编程详解(二)——编程实例
查看>>
解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
查看>>
端口号
查看>>
mysql for macOS安装
查看>>
HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
查看>>