前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android:Content Provider数据共享

Android:Content Provider数据共享

作者头像
提莫队长
发布2019-03-01 09:46:25
1.2K0
发布2019-03-01 09:46:25
举报
文章被收录于专栏:刘晓杰刘晓杰

ContentProvider 属于Android应用程序的组件之一,作用是对外共享数据。我们可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。

可以通过以下方法获得ContentProvider对象

代码语言:javascript
复制
ContentResolver cr = getContentResolver();

1.数据模型

ContentProvider 将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个 "_ID" 数值字段,该字段唯一标识一条数据。

查询返回一个Cursor对象,它能遍历读取各个字段的值。为了读取数据,必须知道包含的数据类型

2.URI

每一个ContentProvider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个ContentProvider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以"content://" 开头,其中"content://"是用来标识数据是由ContentProvider管理的

Android系统提供常见ContentProvider说明如下:

  1. Browser:读取或修改书签、浏览历史或网络搜索
  2. CallLog:查看或更新通话记录
  3. Contacts:获取、修改或保存联系人信息
  4. LiveFolders:由ContentProvider提供内容的特定文件夹
  5. MediaStore:访问声音、视频和图片
  6. Setting:查看和获取蓝牙设置、铃声和其他设备偏好
  7. SyncStateContract:用于使用数据数组账号关联数据的ContentProvider约束。希望使用标准方式保存数据的provider时可以使用
  8. UserDictionary:在可预测文本输入时,提供用户定义单词给输入法使用。应用程序和输入法能增加数据到该字典。单词能关联频率信息和本地化信息

数据操作 

1.查询数据:

代码语言:javascript
复制
public Cursor query(Uri uri, String[]projection, String selection, String[] selectionArgs, String sortOrder)

Uri uri                                   标识特定的uri常量

String[] projection             需要返回的列名,是一个数组,可以返回多个列。null表示全部

String selection                  表示需要满足的查询条件,类似于where

String[] selectionArgs      选择参数

String sortOrder                类似于order by。Null表示默认,可能是无序的

获得数据使用Cursor对象处理,它能向前或向后遍历整个结果集

2.增加记录

代码语言:javascript
复制
public Uri insert(Uri uri, ContentValuesvalues) 

3.批量更新记录

代码语言:javascript
复制
public int update(Uri uri, ContentValuesvalues, String selection, String[] selectionArgs)

4.删除记录

代码语言:javascript
复制
public int delete(Uri uri, Stringselection, String[] selectionArgs)

 接下来用一个实例来展示怎么运用:

代码语言:javascript
复制
                   Cursorcursor = resolver.query(Contacts.CONTENT_URI, null, null, null, null);
                   while(cursor.moveToNext()){
                            int idIndex = cursor.getColumnIndex(columns[0]);
                            int displayNameIndex = cursor.getColumnIndex(columns[1]);
                            int id = cursor.getInt(idIndex);
                            String displayName = cursor.getString(displayNameIndex);
                            Cursor phone = resolver.query(Phone.CONTENT_URI, null, columns[3] + "=" +id, null, null);
                            while(phone.moveToNext()){
                                     int phoneNumberIndex = phone.getColumnIndex(columns[2]);
                                     String phoneNumber =phone.getString(phoneNumberIndex);
                                     sb.append(displayName + ":" + phoneNumber + "\n");
                            }
                            phone.close();
                   }
                   cursor.close();

里面用到的数据类型是

代码语言:javascript
复制
	private String[] columns = {Contacts._ID, Contacts.DISPLAY_NAME,
			Phone.NUMBER, Phone.CONTACT_ID};

Phone.CONTACT_ID在columns[3],所以是用它和id比较作为判断条件。可见ContentProvider里面的数据都是有唯一的标识符的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数据模型
  • 2.URI
  • Android系统提供常见ContentProvider说明如下:
  • 数据操作 
    • 1.查询数据:
      • 2.增加记录
        • 3.批量更新记录
          • 4.删除记录
          •  接下来用一个实例来展示怎么运用:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档