一、数据存储的方式
在android中,数据存储分为内部存储(Internal Storage)和外部存储(External Storage)。内部存储又分为SharedPreferences保存简单键值对数据,SQLite Databases(数据库)保存将结构化的数据,以及文件存储。
【内存存储和外部存储的区别】
1、内部存储始终可用,外部存储(主要指sdcard)不一定始终可用。
2、默认情况下,内部存储只有本应用可以访问。而外部存储分为共有目录和私有目录,其中共有目录属于全局可读写。
3、当应用被卸载时,内部存储数据会被删除,外部存储的私有目录会被删除。外部存储的共有目录中的数据会被保留。
系统分配给应用的内部存储空间有限,对于大数据建议保留在外部存储中。
二、SharedPreferences
(一)概述
SharedPreferences是Android提供的一种轻量级的存储机制,可以存储一些简单类型的数据,如boolean、int、float、long和String、Set。
SharedPreferences使用Map数据结构来存储数据,以键值对的方式存储数据。
实质是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下。
(二)SharedPreferences实例的获取
1、 Context类中的getSharedPreferences(String name, int mode)方法
第一个参数用于指定SharedPreferences文件的名称,如果指定的不存在则会创建一个。
第二个参数用于指定操作模式,主要有两种模式:Context.MODE_PRIVATE和Context.MODE_APPEND。对于SharedPreferences两种模式没有差别,一般使用MODE_PRIVATE。
MODE_PRIVATE:默认操作模式,其值为0,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。
MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则创建新文件。
另外还有三种模式,主要用于跨进程的数据访问,建议使用ContentProvider。
2、Activity类中的getPreferences(int mode)方法,只接受一个操作模式参数。
3、PreferenceManager类中的getDefaultSharedPreferences()方法,它接收一个context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。
(三)数据存储
1、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor(内部类)对象;(SharedPerferences接口本身并没有提供写入数据的能力)
2、通过Editor的putXXX(key, value)方法向Editor对象中添加数据;
3、调用Editor的commit()方法提交数据,完成数据存储操作。
SharedPreferences.Editor editor = sp.edit();
editor.putString("testKey", txt);
editor.commit();
【注意】在程序中的Key值最好定义成常量
(四)数据读取
通过SharedPreferences对象的getXXX()可以获取对应的数据,getXXX()方法接收两个参数,第一个参数是键(存数据时使用的键名),第二个参数为默认值,即当找不到对应的键时返回该值。
sp.getString("testKey","");
(五)数据删除
通过SharedPreferences.Editor对象实现数据的删除
1、清空所有数据,调用clear()
2、删除指定key对应数据,调用remove(String key)
editor.clear();
editor.remove("testKey");
editor.commit();
(六)判断sharedPerferences是否包含特定的key
通过SharedPreferences对象,来判断是否包括指定key的数据
boolean contains(String key)
【案例】
网盘地址: http://pan.baidu.com/s/1o8rprxK
【练习】
1、封装SharedPreferences存储的工具类
2、应用程序首画面(闪屏画面)停留2秒钟,如果是首次运行,进入画面B(引导画面),否则进入画面C(主画面)
3、账号密码记忆功能
初次运行进入登录画面,输入用户和密码。第二次运行进入登录画面,直接显示保存的用户名和密码。