Android开发教程 --- 数据存储(1) Shared Preferences、 Files、NetWork

Hi,大家好!

     今天,主要学习Android的数据存储机制,主要分为四种方式,今天我们先来介绍,Shared Preferences、 Files、NetWork,下节我们介绍SQLite方式。

    照例,轻松下:

IT厕所的遭遇
     一日,去逛电脑城,突然觉得一阵腹痛。不好,要如厕。
     急匆匆来到WC前,抬头只见门口上方挂一电子牌,上写:“最新windows vista server WC”      
     不禁赞叹:果然是IT,高科技!
     好急,快进去,怎么门推不开?
     抬头一看,电子板上显示:“用户名不存在或密码错误,请找管理员”。
     给看门老头交了两毛钱,拿了个密码,急忙入内,冲向马桶。可是马桶盖怎么也打不开,我实在忍不住了,用力一拉,墙上弹出一块牌   子:“系统提示:您没有这个马桶的访问权限!”好在我知道一个超级用户密码,在控制面板中输入后,马桶盖终于打开了。长舒了一口气,好舒服哦!
     完事,伸手去拿手纸,手纸却又没法从盒子里抽出来,不会吧,难道……
     一转头,果然,又弹出了一个牌子:“此纸盒已加密!”
     我晕,正在急不可耐时,旁边蹲位有人伸过来一只手:“你第一次用windows vista server WC吧,没关系,我们手纸共享好了。”
     “谢谢,谢谢。”边道谢,我边提好裤子。
     一冲马桶,又弹一牌子:“病毒已清除!”
     刚走两步,只听“砰”的一声,马桶盖大力地关上了,牌子上道:“连接超时,请刷新!”
     好险!

   Shared Preferences

  1. 什么是 Shared Preferences?

  2. 如何使用 Shared Preferences 保存数据?

  3. 如何使用 Shared Preferences 获得数据?

  1. Shared Preferences 类似于winform中做一些小型配置的ini文件,用来保存一些用户设置的参数。例如,可以通过它保存上一次用户所做的修改或者自定义参数设定,当再次启动程序后依然保持原有设置。

    用来存储“键-值”对的格式数据。是一个轻量级的键值对存储机制,只可以存储基本数据类型。

2. 首先,需要获得SharedPreferences对象,通过

    SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);

    通过SharedPreferences.edit()函数获得编辑对象,就可以写数据了

    保存数据的代码如下:

   创建一个全局变量s

   private String sfKey = "isplay";

/**
* Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND
Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,
Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;
//如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
*/
@Override
public void onClick(View v) {
//获得SharedPreferences对象
SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);
//SharedPreferences sharedPre=getSharedPreferences("aaa",Activity.MODE_PRIVATE);
//获取SharedPreferences的编辑对象
SharedPreferences.Editor editor=sharedPre.edit();
if(rb0.isChecked())
editor.putBoolean(sfKey, true);//添加保存数据 键值对格式
else
editor.putBoolean(sfKey, false);
editor.commit(); //保存数据
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
}

 

   3.  获取数据代码如下:

  

 SharedPreferences sharedPre=getPreferences(Activity.MODE_PRIVATE);
//第一个参数 表示,要创建的文件名 将创建一个aaa.xml
//SharedPreferences sharedPre=getSharedPreferences("aaa",Activity.MODE_PRIVATE);
if( sharedPre.getBoolean(sfKey, false))
rb0.setChecked(true);
else
rb1.setChecked(true);

 

     在一个应用程序的不同Activity之间共享变量,使用getSharedPreferences(),如果只是想保存一个活动的状态,而不需要和其他活动共享,则可以使用Activity.getPreference()。

    getPreferences()只需要一个mode参数,而getSharedPreferences()还需要另外指定名称。

SharedPreferences 的四种存储权限

    Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND

   Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取

   Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入; 

   Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件

   //如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE

查看 Preferences 产生的文件(选中当前文件,导出这个文件,大家可以看下保存的数据其实就是一个XML节点)

1

大家可以做个练习,如下图,来巩固当前所学

2

 

  Files

  1. 什么是 Files 数据存储

  2. 什么是 Properties ?

  3. 如何保存数据

  4. 如何获取数据

  1. File 就是把需要保存的东西通过文件的形式讯录下来,当需要这些数据时,通过读取这个文件来获取这些数据。因为 Android 采用了 Linux 核心,所以在Android 系统中,文件也是Linux 的形式。

    Android 中可以在设备本身的的存储或者外接的存储设备中创建用于保存数据的文件。同时,在默认状态下,文件是不能在不同的程序间共享的。

   2. Properties(属性),可以把Properties继承自Hashtable,理解成一个Hashtable ,不过唯一不同的是,Properties对应的“键-值”必须是字符串形式的数据类型。Files 数据存储主要是使用 Properties 配合 FileInputStream或者FileOutputStream对文件写入操作。

   3. 保存数据代码如下:

    创建全局变量

  private String sfKey = "isplay";

public boolean save()
{
Properties properties =new Properties();
if(rb0.isChecked())
properties.put(sfKey,String.valueOf(true)); //保存的键-值必须是字符串形式
else
properties.put(sfKey, String.valueOf(false));
try {
//保存的文件格式 可以使用Linux的文件类型,也可以使用Windows的文件类型
//FileOutputStream 文件写入流
FileOutputStream stream=this.openFileOutput("FilesData.cfg", Context.MODE_PRIVATE);
properties.store(stream, "");
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
return false;
}
return true;

}

 

   4. 获取数据代码如下:

    public void load() 
{
Properties properties=new Properties();
try {
FileInputStream stream =this.openFileInput("FilesData.cfg");
properties.load(stream);//代码中有对properties对象方法的解释,自己去看
//可以通过properties.getProperty()获取需要的Value
boolean result =Boolean.valueOf(properties.getProperty(sfKey));
if(result)
rb0.setChecked(true);
else
rb1.setChecked(true);
} catch (Exception e) {
// TODO: handle exception
}

}

常用方法

/*公用方法
* •返回值:String
方法:getProperty(String name, String defaultValue)
解释:通过指定的 “name“ 即Key,搜索属性,参数二为默认值,即通过Key找不到文件中的属性时,要返回的默认值。

•返回值:String
方法:getProperty(String name)
解释:通过指定的 ”name“ 即为 Key,搜索属性,没有返回默认值。

•无返回值:void
方法:list(PrintStream out)
解释:通过PrintStream 列出可读的属性列表

•无返回值:void
方法:list(PrintWriter writer)
解释:通过PrintStream 列出可写的属性列表

•无返回值:synchronized void
方法:load(InputStream in)
解释:从指定的 ”inputStream “ 即输出流,加载properties

•无返回值:synchronized void
方法:loadFromXML(InputStream in)
解释:从指定的 "InputStream" 即输出流,加载一个以XML形式的 Properties

•返回值:Enumeration<?>
方法:propertyNames()
解释:返回所有包含在文件里面的属性名称

•无返回值:void
方法:save(OutputStream out, String comment)
解释:注意,这种保存方法己经过时,Google 不推荐使用此种写法,这种方法忽略任何IO 异常,所以在实际操作过程中,可能会发生不必要的异常。

•返回值:object
方法:setProperty(String name, String value)
解释:设置属性,保存一个”键-值“对的属性。

•无返回值:synchronized void
方法:store(OutputStream out, String comment)
解释:通过 FileOutputStream 打开对应的程序文件,然后通过Store 保存之前 Properties 打包好的数据。这里备注可以为空。

•无返回值:void
方法:storeToXML(OutputStream os, String comment)
解释:通过FileOutputStream 打开对应的程序文件,将打包好的数据写入到XML文件。

•无返回值:synchronized void
方法:storeToXML(OutputStream os, String comment, String encoding)
解释:通过FileOutputStream 打开对应的程序文件,将打包好的数据写入到XML文件,第三个参数可以指定编码。

*
*/



查看产生的File文件

3

 

NetWork

通过这种方式保存数据,相对来说会比较繁琐,也不实用,在开发中不会使用这种方式,所以不推荐大家使用,如果大家有兴趣,可以去搜索下相关资料,了解了解。

代码以上传至北京天圣达科技公司,欢迎大家下载

posted @ 2011-12-27 08:20  Jason_CC  Views(2117)  Comments(1Edit  收藏  举报