首页 技术 正文
技术 2022年11月18日
0 收藏 757 点赞 5,214 浏览 2110 个字

问题聚焦:

思想:应用程序数据的共享

对数据库的访问仅限于创建它的应用程序,但是事情不是绝对的

Content Provider提供了一个标准的接口,可供其他应用程序访问和使用其他程序的数据

下面我们由下向上来分析ContentProvider的处理流程:

1 数据库——SQLite使用者:ContentProvider映射:Content Value映射为数据库中的表的一行;查询:Cursor,底层数据中的结果集的指针;使用:SQLiteOpenHelper,抽象类,用于实现创建、打开和升级数据库

继承该类,重写其构造函数,onCreate方法(创建)和onUpgrade方法(更新)

访问:getWritableDatabase方法(获得可写的数据库实例)和getReadableDatabase方法(获取只读的数据库实例)

Demo


/** 插入新行 **/// 创建要插入的一行新值
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使用者:自身为独立的APP作用:将使用数据的应用程序组件和底层的数据源分离使用:ContentProvider,抽象类,继承该类,并重写方法:

  • onCreate(): 初始化底层的数据源
  • query()
  • update()
  • delete()
  • insert()
  • getType()

注册:通过标记实现,name属性+authorities标记

demo: 

    <provider android:name="ArticlesProvider"
android:authorities="shy.luo.providers.articles">
</provider>

发布:URI        demo:

            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交互
3 ContentResolver——使用ContentProvider使用者:应用程序作用:应用程序通过它来查询和操作Content Provdier特点:ContentProvider提供了底层数据的抽象

ContentResolver提供了查询和处理ContentProvider的抽象

使用:通过URI交互

Demo


/** 查询操作 **/
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

Uri代表了要操作的数据格式:content:// 主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。路径(path)可以用来表示我们要操作的数据Android开发(7)数据库和Content Provider
5 小结:一张图概括一下这章的内容:Android开发(7)数据库和Content Provider
ContentProvider作为一个独立的APP

  • 与下层的数据源进行交互,使用SQLiteOpenHelper类
  • 与上层的应用程序进行教书,使用ContentResolver类+URI

参考文档:《Android系统源代码情景分析》《Android高级编程3rd》 ContentProvider和Uri详解: http://www.cnblogs.com/linjiqin/archive/2011/05/28/2061396.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,488
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289