目录(?)[+]

 

  当一个应用程序在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. 【Windows使用笔记】神舟笔记本的control center

    首先,神船大法好. 然后,因为我的船风扇声音有点大啊,在实验室感觉就很吵,但是它的背板温度又不是很高,所以想设置下风扇的启动. 所以需要用到神船自带的control center软件. 长这样. 应该 ...

  2. python近期遇到的一些面试问题(三)

    python近期遇到的一些面试问题(三) 整理一下最近被问到的一些高频率的面试问题.总结一下方便日后复习巩固用,同时希望可以帮助一些朋友们. 前两期点这↓ python近期遇到的一些面试问题(一) p ...

  3. 系统日志查看logrotate 工具

    logrotate是作为linux系统日志的管理工具存在.他可以轮换,压缩,邮件系统日志文件. 默认的logrotate被加入cron的/etc/cron.daily中作为每日任务执行./etc/lo ...

  4. 20165301 2017-2018-2 《Java程序设计》第七周学习总结

    20165301 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十一章:JDBC与MySQL数据库 MySQL数据库管理系统 启动MySQL数据库服务器 ...

  5. 简易代理服务器之python实现

    代理服务器是在client和server之间的一个服务器,一般起到缓存的作用,所以也叫缓存服务器.比如: A ----(HTTP)----> B ----(HTTP)----> C 其中A ...

  6. 深入浅出Mysql索引

    索引的出现其实就是为了提高数据查询的效率,就像书的目录一样. 索引模型有三种常见.也比较简单的数据结构分别是哈希表.有序数组和搜索树. 哈希表 哈希表是一种以键 - 值(key-value)存储数据的 ...

  7. Hadoop(三)HDFS读写原理与shell命令

    一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...

  8. LR字符串处理

    Action() { strchr和strrchr: //strchr:查找指定字符在一个字符串中第一次出现的位置,然后返回指向该位置的指针. //char *strchr(const char *s ...

  9. SaltStack--Job管理 (八)

    官方文档:https://docs.saltstack.com/en/2016.11/ref/modules/all/salt.modules.saltutil.html [root@7mini-no ...

  10. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...