目录(?)[+]

 

  当一个应用程序在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存储数据的更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  5. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  6. Android中获取网页表单中的数据实现思路及代码

    在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...

  7. Android中获取网页表单中的数据

    MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...

  8. Android开发手记(19) 数据存储四 ContentProvider

    转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1.SharedP ...

  9. Android数据的四种存储方式

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...

  10. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别 是:SharePreference.SQLite.Content Provider和File ...

随机推荐

  1. PGSql

    http://www.yiibai.com/postgresql/ http://www.postgresql.org/ http://blog.csdn.net/wulex/article/deta ...

  2. MYSQL三种安装方式--二进制包安装

    1. 把二进制包下载到/usr/local/src下 2. 如果是tar.gz包,则使用tar zxvf 进行解压 如果是tar包,则可以使用tar xvf 进行解压 3. $ mv mysql-5. ...

  3. Java文件上传与下载

    文件上传与下载可谓上网中的常见现象.apache为我们准备了用于文件上传与下载的两个jar包(commons-fileupload-1.2.1.jar,commons-io-1.4.jar).我们在w ...

  4. Linux Supervisor的安装与使用入门---Ubuntun

    Linux Supervisor的安装与使用入门 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事 ...

  5. oracle相关命令收集-张

    orcle相关命令收集 1,用管理员登陆 /as sysdba:2, 更改用户密码 alter user name identified by password: alter user exptest ...

  6. mysql军规

    总是在灾难发生后,才想起容灾的重要性.总是在吃过亏后,才记得曾经有人提醒过. 一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数控制在2 ...

  7. 数据分析python应用到的ggplot

    数据分析中应用到python中的ggplot库,可以用来画图 数据之类的用优达学院中课程七中的数据为例 数据是:https://s3.amazonaws.com/content.udacity-dat ...

  8. Cookie 与 网络通信

    通信协议是什么?(ftp.http.https.file...) 交流的规则 举例: 汉语.英语.法语.德语 (百度百科:通信协议) 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定.通过通信 ...

  9. css 资料链接

    https://tink.gitbooks.io/fe-collections/content/ch03-css/float.html https://css-tricks.com/almanac/p ...

  10. day2 字典常用的方法

        字典创建的方式: (1)d1 = {"k1":"v1","k2":"v2","k3":&qu ...