Android中我们的应用程序中有少量的数据要保存,而且这些数据的格式很简单,是一些普通的字符串、基本的数据类型,比如:应用程序的各种配置信息(如:是否打开同步,是否打开音响,是否使用振动等),游戏的玩家积分等,我们可以用Android提供的SharedPreferences进行保存。当应用程序有大量数据需要存储、访问,就需要借助于数据库了,Android内置了SQLite数据库,一个轻量级的数据库,它没有后台进程,整个数据库就对应一个文件。

接下来简单介绍一下SharedPreferences和SQLite

数据存储:
一、SharedPreferences
Preference简介:
Preference:轻量级的数据存储方法,应用场合主要是数据比较少的配置信息。 它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。
使用Preference 方式来存储数据,用到了SharePreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。
调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式一共有三种:MODE_PRIVATE(私有)、MODE_WORLD_READAVLE(可读)和MODE_WORLD_WRITEABLE(可写)。SharedPreferences提供了获得数据的方法,如getString(String key,String defValue)、getInt(String key,int defValue)等。

调用SharedPreferences的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value)、putInt(String key,int value)等,调用该接口的commit()方法可以将数据进行保存。

1. SharedPreferences
SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此塔保存的数据主要是简单类型的Key-Value对。
SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下方法来访问SharedPreferences中键值对。

a. boolean contains(String key):判断SharedPreferences是否包含特定的数据。
b. abstract Map<String,?> getAll():获取SharedPreferences数据里全部的键值对
c. boolean getXxx(String key,xxx defValue):获取SharedPreferences数据里指定的key对应的value.如果该key不存在,返回默认值defValue。

SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreferences的内部接口,SharedPreferences调用edit()方法即可获取它所对应的Editor对象。
Editor提供了如下方法向SharedPreferences写入数据:
a. SharedPreferences.Editor clear():清空SharedPreferences里面的数据。
b. SharedPreferences.Editor putXxx(String key,xxx value): 向SharedPreferences存入指定的Key对应的数据。
c. SharedPreferences.Editor remove(String key):删除SharedPreferences里指定key对应的数据项。
d. boolean commit():当Editor编辑完成后,调用该方法提交修改。

SharedPreferences本身是一个接口,程序无法直接创建SharedPerences实例,只能通过Context提供的getSharedPreences(String name,int mode)方法来获取SharedPreferences实例,该方法的第二个参数有如下几个值:
a. Context.MODE_PREIVATE:指定该SharedPreferences数据只能被本应用程序读写。
b. Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
c. Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写。

2. 读写其他程序的SharedPreferences
前提是创建该SharedPreferences的应用程序指定相应的访问权限,例如:指定MODE_WORLD_READABLE:表明该SharedPreferences可被其他的应用程序读取。指定了MODE_WORLD_WRITABLE:表明该SharedPreferences可被其他程序写入。
一个SharedPreferences读取另一个权限为MODE_WORLD_READABLE模式的SharedPreferences时的步骤:
a. 需要创建其他程序对应的Context,例如:useCount = createPackageContext("com.infy.io",Context.CONTEXT_IGNORE_SECURITY);//其中com.infy.io为其他程序的包名(Android系统的包名来作为该程序的标识的)
b. 调用其他应用程序的Context的getSharedPreferences(String name,int mode)即可获取相应的SharedPreferences对象。
c. 如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit方法获取相应的Editor即可。
如果开发者不通过先获取其他应用程序的Context,再获取SharedPreferences的方式也可读取SharedPreferences数据,也可以完全可以使用IO流的方式读取SharedPreferences对应的XML文件,再通过XML解析来获取数据也是可行的,只是这种方式没有SharedPreferences来读写简单。

3. File存储
Android支持以IO流的方式来访问手机存储器上的文件。
Context提供了两个方法来打开本应用的数据文件夹里的文件IO流。

a. FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应的输入流。
b. FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件夹下的name文件对应的输出流。

其中第二个方法的二个参数指定打开文件的模式,有如下值:
MODE_PRIVATE:该文件只能被当前程序读写。
MODE_APPEND:以追加的方式打开该问价,应用程序可以向该文件中追加内容。
MODE_WORLD_READABLE:该文件的内容可以被其他程序读取。
MODE_WORLD_WRITEABLE:该文件的内容可以由其他程序读写。

Context还提供了如下几个方法来访问应用程序的数据文件夹:
a. getDir(String name,int mode):在应用程序的数据文件夹下获取或创建name对应的子目录。
b. File getFilesDir():获取该应用程序的数据文件夹得绝对路径。
c. String[] fileList():返回该应用程序的数据文件夹下的全部文件。
d. deleteFile(String):删除该应用程序的数据文件夹下的指定文件。

4. 读写SD卡上的文件:
为了更好的存、取应用程序的大文件,应用程序需要读、写SD卡上的文件。
读、写SD上的文件步骤:
a. 调用Environment的getExternalStorageState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限。
例如:Environment.getExternalStorageSate().equals(Environment.MEDIA_MOUNTED)//如果手机已插入SD卡,且应用程序具有读写SD卡的能力,则返回true.
b. 调用Environment的getExternalStorageDirectory()方法来获取外部存储器、也就是SD卡的目录
c. 使用FileInputStream、FileOutStram、FileReader或FileWriter读、写SD卡里的文件。
(读写SD数据,必须在应用程序的清单文件中添加读写SD卡的权限:<user-permissin android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>//在SD卡中创建于删除文件权限
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>//向SD卡写入数据权限)

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. NPM 和webpack 的基础使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android系统
  6. android makefile(android.mk)分析(序)
  7. android 基础概述
  8. Android架构组件四 Android(安卓)Architecture Components LiveD
  9. DCCI与UC联合发布2012中国Android用户数据报告

随机推荐

  1. nfs: server 192.168.0.3 not responding
  2. android添加hid设备驱动
  3. Android调用camera错误setParameters fai
  4. android 两种按钮的动画效果
  5. android NDK学习篇5之hello-jni——jni中
  6. 说说 Android(安卓)的 Material Design
  7. android之ListView上拉加载更多和下拉刷
  8. [置顶] 【SwipeRefreshLayout】Google官
  9. Eclipse如何开发Android?
  10. android进程等级以及startService与bouds