Android中数据存储(四)——ContentProvider存储数据
当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢?
数据存储方式
Android 的数据存储有5种方式:
1. SharedPreferences存储数据
SharedPreferences数据存储,也叫作xml存储。这是将数据存储“data/data/程序包名/share_prefs”路径下的到xml文件中。
相关连接: 《Android中数据存储——SharedPreferences存储数据 》
2. 文件存储数据
分为内部储存和外部存储。内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/程序包名/files”路径下的相应文件中。外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡),使用这部分内存要声明相应的权限。
相关连接:《Android中数据存储——文件存储数据 》
3. SQLite数据库存储数据
使用数据库进行存储,这个一般数据量比较大的时候。
相关连接:《Android中数据存储——SQLite数据库存储数据 》
4. 使用ContentProvider存储数据
这个比较眼熟,ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,向我们手机中的通讯录联系人,照片,音乐等……
相关连接:《Android中数据存储——ContentProvider存储数据》
5. 网络存储数据
这个是将数据上传到网络上进行存储。
下面进入我们今天的主要内容,使用ContentProvider存储数据。
ContentProvider存储数据
ContentProvider内容提供器,主要用于在不同应用程序之间实现数据的共享功能。举例来说,我们开发一个应用程序,我们不可能只使用自己的数据,也会用到其他应用的数据,像手机中的通讯录联系人,图片,音乐等是使用到最多的。我们使用的SharedPreferences,文件存储以及数据库SQLite都是从存储的应用内部的数据,实现不同应用间的数据共享就要使用到ContentProvider。
ContentProvider使用方法有两种:一种是使用现有的内容提供器来读取和操作相应程序中的数据;另一种是创建自己的内容提供器给我们的应用提供外部访问接口。
这里我们只讲解使用已有的内容提供器来读取和操作相应程序的数据。
ContentResolver的使用
想要访问内容提供器中的内容我们需要借助ContentResolver类。
ContentResolver为我们提供了”增“insert(Uri url, ContentValues values),“删”delete(Uri url, String where, String[] selectionArgs),“改”update(Uri uri, ContentValues values, String where, String[] selectionArgs),“查”query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)方法对内容提供器中的内容进行操作,是不是很眼熟,对啊,和SQLiteDatabase中的增删改查操作是一样的,在此我们不再具体描述。
Uri的使用
在SQLiteDatabase中,对数据库的操作是通过接受数据库的表名进行操作的,而在ContentResolver中是不接受表名的,而接受Uri对象。通过Uri指定操作的内容“位置”。
Uri由两部分组成:权限和路径。权限是对于不同的应用程序进行区分的,一般用应用程序的包名;路径是对于同一应用程序的不同表进行区分的。例如,我们有一个应用程序的包名是“com.example.ontentproviderdemo”,应用程序中有一个表“table”,则Uri为:“content://com.example.ontentproviderdemo/table”。我们通过parse()方法将其解析为Uri便可以使用了。
Uri uri = Uri.parse.("content://com.example.ontentproviderdemo/table");
查询通讯录
我们以查询通讯录中的内容为例,看一下ContentProvider的使用。通过Android提供的ContentProvider内容提供器访问通讯录中的联系人数据。
1. 读取联系人是需要权限的,首先在AndroidManifext中加入权限:
<!--允许读取通讯录 --> <uses-permission android:name="android.permission.READ_CONTACTS"/>
2. 创建ContentResolver对象对ContentProvider进行操作。
3. 创建一个Uri对象,指定访问通讯录。这里我们使用Android已经解析好的Uri即可:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
4. 查找联系人内容使用ContentResolver的query()方法,返回一个Cursor对象。
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Cursor cursor = contentResolver.query(uri, new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String num = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.d("data", "联系人姓名:" + name + ", 电话:" + num);
cursor.moveToNext();
}
通讯录内容:
读取结果:
Android中数据存储(四)——ContentProvider存储数据的更多相关文章
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider
ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的. ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
- (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- Android中获取网页表单中的数据实现思路及代码
在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...
- Android中获取网页表单中的数据
MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...
- Android开发手记(19) 数据存储四 ContentProvider
转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1.SharedP ...
- Android数据的四种存储方式
作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别 是:SharePreference.SQLite.Content Provider和File ...
随机推荐
- tera term通过ttl脚本 自动连接服务器(转自http://www.cnblogs.com/wxb0328/p/teraterm.html)
转自http://www.cnblogs.com/wxb0328/p/teraterm.html 在现在的这个公司一直使用tera term来远程连接服务器,感觉很方便,特别是它的ttl脚本配置的自动 ...
- makefile里PHONY的相关介绍
Phony Targets PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 如果编写一个规则,并不产生目标文件 ...
- 如何删除git远程分支(转)
1,在开发过程中,大家在远程创建了许多分支,有些是无用的,该如何删除呢,可以参考下面的方法. 如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放 稳 ...
- python继承问题
python构造函数:__init__(): 如果子类定义了自己的__init__构造方法函数,当子类的实例对象被创建时,子类只会执行自己的__init__方法函数,如果子类未定义自己的构造方法函数, ...
- Linux命令参数处理 shell脚本函数getopts
getopts 命令 用途 处理命令行参数,并校验有效选项. 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 的设计目标是在循环中运行,每次执行循环,getopts ...
- leetcode 之trap water(8)
这题不太好想.可以先扫描找到最高的柱子,然后分别处理两边:记录下当前的局部最高点,如果当前点小于局部最高点,加上, 反则,替换当前点为局部最高点. int trapWater(int A[], int ...
- centos6下mysql的主从复制的配置
2015年9月17日 23:00:36 update 想要好好了解mysql复制,还是去看看<高性能MySQL>(第三版)好了,上面说的比较详细. =========== 在本地用virt ...
- Spring学习-理解IOC和依赖注入
最近刚买了一本介绍ssm框架的书,里面主要对Mybatis.spring.springmvc和redis做了很多的讲解,个人觉得虽然有的内容我看不懂,但是整体上还是不错的.最近正在学习中,一边学习一边 ...
- 在Windows中安装Boot2Docker 遇到 Unable to load R3 module 的解决方案
引言 这个几乎是所有64位win7用户在virtual box上安装64位的linux都会遇到的问题(如果你用的是买机器的时候自带的win7 64位而且你没有重装过系统的除外). 解决办法 可参考以下 ...
- spring_150807_hibernate_transaction_annotation
实体类: package com.spring.model; import javax.persistence.Entity; import javax.persistence.Id; import ...