Android开发(7)数据库和Content Provider
思想:应用程序数据的共享
对数据库的访问仅限于创建它的应用程序,但是事情不是绝对的
Content Provider提供了一个标准的接口,可供其他应用程序访问和使用其他程序的数据
下面我们由下向上来分析ContentProvider的处理流程:
1 数据库——SQLite
继承该类,重写其构造函数,onCreate方法(创建)和onUpgrade方法(更新)
访问:getWritableDatabase方法(获得可写的数据库实例)和getReadableDatabase方法(获取只读的数据库实例)
/** 插入新行 **/ // 创建要插入的一行新值
ContentValues newValues = new ContentValues(); //为每一个字段赋值
newValues.put(NAME_COLUMN, _name);
newValues.put(ADDRESS_COLUMN, _address);
...... //插入到数据库中
SQLiteDatabase db = DBOpenHelper.getWritableDatabase();
db.insert(DBOpenHelper.DATABASE_TABLE, null, newValues);
2 Content Provider
- onCreate(): 初始化底层的数据源
- query()
- update()
- delete()
- insert()
- getType()
注册:通过标记实现,name属性+authorities标记
demo:<provider android:name="ArticlesProvider"
android:authorities="shy.luo.providers.articles">
</provider>
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/item");
public static final Uri CONTENT_POS_URI = Uri.parse("content://" + AUTHORITY + "/pos");
ContentResolver提供了查询和处理ContentProvider的抽象
使用:通过URI交互
/** 查询操作 **/
public Article getArticleById(int id) {
Uri uri = ContentUris.withAppendedId(Articles.CONTENT_URI, id); String[] projection = new String[] {
Articles.ID,
Articles.TITLE,
Articles.ABSTRACT,
Articles.URL
}; Cursor cursor = resolver.query(uri, projection, null, null, Articles.DEFAULT_SORT_ORDER); // 获取一个数据库的游标 Log.i(LOG_TAG, "cursor.moveToFirst"); if (!cursor.moveToFirst()) {
return null;
} String title = cursor.getString(1);
String abs = cursor.getString(2);
String url = cursor.getString(3); return new Article(id, title, abs, url);
}
4 URI


- 与下层的数据源进行交互,使用SQLiteOpenHelper类
- 与上层的应用程序进行教书,使用ContentResolver类+URI
Android开发(7)数据库和Content Provider的更多相关文章
- Android开发-API指南-创建 Content Provider
Creating a Content Provider 英文原文:http://developer.android.com/guide/topics/providers/content-provide ...
- Android开发学习之路--Content Provider之初体验
天气说变就变,马上又变冷了,还好空气不错,阳光也不错,早起上班的车上的人也不多,公司来的同事和昨天一样一样的,可能明天会多一些吧,那就再来学习android吧.学了两个android的组件,这里学习下 ...
- 我的Android 4 学习系列之数据库和Content Provider
目录 创建数据库和使用SQLite 使用Content Provider.Cusor和Content Value来存储.共享和使用应用程序数据 使用Cursor Loader异步查询Content P ...
- 数据库和Content Provider
SQLite提供了强大的SQL数据库的库文件,从而使应用程序拥有一个具备完全控制权的健壮的持久化层. Content Provider实现在应用程序内和应用程序之间存储.共享和使用结构化数据.通过将数 ...
- 安卓开发_深入理解Content Provider
一.Content Provider概述 Content Provider用于保存和获取数据,并使其对所有应用程序可见,这是不同应用程序之间共享数据的唯一方式,因为在Android中没有提供所有应用可 ...
- Android 内容提供器(Content Provider)介绍
内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前,使用内容 ...
- 【转】Android开发之数据库SQL
android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLi ...
- Android 数据存储04之Content Provider
Content Provider 版本 修改内容 日期 修改人 V1.0 原始版本 2013/2/25 skywang 1 URI 通用资源标志符(Universal Resource Identif ...
- Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈
目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...
随机推荐
- 警告: Hessian/Burlap: 'com.github.pagehelper.Page' is an unknown class in WebappClassLoader
项目中使用mybatis的分页插件pagehelper出现下面的警告 出现上面的警告,并不影响程序的运行.但是毕竟看着比较闹心. 使用debug进行代码根据发现,执行的过程中使用到了pagehelpe ...
- 配置MySQL接受远程登录连接
一 开放mysql mysql的配置文件在/etc/mysql/my.cnf文件内,里面有一行bind-address = 127.0.0.1表示只允许本地访问,将这行注释即可 # bind-addr ...
- push到github报错解决方法
在push代码到远程仓库时,报了如下的错误: $ git push -u origin master To https://github.com/11pdg/group-buy.git ! [reje ...
- 【转】NuGet学习笔记
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- Spring中使用JMS
JMS为了Java开发人员与消息代理(message broker)交互和收发消息提供了一套标准API.而且,由于每个message broker都支持JMS,所以我们就不需要学习额外的消息API了. ...
- 【angular5项目积累总结】一些正则积累
/^[1-9][0-9]{0,4}$/ /^[1-9][0-9]{0,4}(,[1-9][0-9]{0,4})*$/ /^([a-zA-Z0-9_\-])+\@(([a-zA-Z0-9\-])+\.) ...
- 从CentOS官网下载系统镜像详细教程
很多新手小白鼠想学习CentOS系统,但是不知道镜像去哪里搞,随便去个第三方发现要么要注册,要么各种广告病毒,或者好不容易找到官网,点进去一看却一脸懵逼,不仅全英文,有些专业术语也不懂啊,不要担心 ...
- spring源码学习(一)
由于本人水平有限,本文内容较为简单,仅供个人学习笔记,或者大家参考,如果能够帮助大家,荣幸之至!本文主要分析AnnotationConfigApplicationContext实例化之后,到底干了那些 ...
- GString惰性求值
当对一个GString实例求值时,如果其中包含一个变量,该变量的值会被简单地打印到一个Writer,通常是一个StringWriter.然而,如果GString中包含的是一个闭包,而非变量,该闭包就会 ...
- Miller-Rabbin随机性素数测试算法
//**************************************************************** // Miller_Rabin 算法进行素数测试 //速度快,而且 ...