持久化技术简介

数据持久化就是指将那些内存中的瞬时刷新数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是瞬时的,保存在存储设备中的数据是永久的,所以持久性技术提供了一种机制可以让数据在顺势状态和持久状态之间进行转换。
Android主要提供了三种方式用于简单的实现数据持久化功能,即文件存储、SharedPreferences存储以及数据库存储,当然还有其他的存储方式但是这三种相对来说更加简单更加安全,下面我们将对这三种存储方式进行简单介绍。

文件存储

文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。若想要通过文件存储保存一些较为复杂的文本数据,就需要定义一套自己的格式规范。
1.将数据存储到文件中
Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。这个方法接收两个参数,第一个参数是文件名,在文件创建时使用这个名称,在这里的文件名不包括路径,因为在Android中的文件存储到都是在默认路径下的;第二个参数是文件的操作模式,主要有两种模式可以选择,MODE_PRIVATE和MODE_APPEND,其中前者是默认的操作模式,表示在使用同文件名时,将覆盖原文件的内容,而后者表示如果文件存在,就往文件里追加内容,不在就创建新文件。
openFileOutput()方法返回的是一个FileOutputStream对象,得到了这个对象之后就可以使用java流的方式将数据写入文件了;具体方法就是:通过openFileOutput()方法得到一个FIleOutputStream对象,然后再借助它构建出一个OutputStreamWriter对象,接着再使用OUtputStreamWriter()构建出一个BufferdeWriter对象,这样你就可以通过BufferedWriter来将文本内容写入文件中了。
2.从文件中读取数据
Comtext类还提供了一个openFileInput()方法,用于从文件中读取数据,这个方法相对于前一个方法来说更加简单,它只接收一个参数,即读取的文件名,然后系统会自己去默认的存储路径下去加载这个文件,并返回一个FileInputStream对象,得到这个对象之后再通过Java流的方式就可以讲数据读取出来了。
通过openFileInput()方法获取到一个FileInputStream对象,然后借助其构建出一个InputStreamReader对象,接着再使用InputStreamReader构建出一个BufferedReader对象,这样我们就可以通过BufferedReader进行一行行读取,把文件中所有的文本内容全部都取出来,并存放在一个StringBuilder对象中,最后将读取的内容返回就行。
以上就是大概的文件存储的操作了,主要用到的是Context中的openFileInput()和openFIleOutput()方法,最后利用java的各种流来实现操作。
文件存储并不适合用于保存一些较为复杂的文本数据,因此我们来学习SharedPreferences存储,他比文件更加简单易用,而且可以很方便的对某一指定的数据进行读写操作。

SharedPreferences存储

SharedPreferences使用的是键值对的方式来存储数据的。也就是说在存储数据时,需要给这个数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来;而且其还支持多种不同的数据类型存储。
1.将数据存储到SharedPreferences中
要想使用SharedPreferences来存储数据,首先需要获取到SharedPreferences对象。Android中主要提供了三种方法用于得到SharedPreferences对象。

  1. Cintext类中的getSharedPreferences()方法:此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个;第二个参数用于指定操作模式,目前只有MODE_PRIVATE这一种模式可选,他是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。
  2. Activity类中的getPreferences()方法:和前一个方法类似不过本方法只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名。
  3. PreferenceManager类中的getDefaultSharePreferences()方法:这是一种静态的方法,它只接收一个Context方法,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。得到了SharedPreferences对象之后,就可以开始向SharedPreferences文件中存储数据了,主要分为三步实现:
    (1):调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
    (2):向SharedPreferences.Editor对象中添加数据,比如添加一个布尔类型数据就是用putBoolean()方法,字符串就是putString()。
    (3):调用apply()方法将添加的数据提交,从而完成数据存储操作。

2.从SharedPreferences中读取数据
SharedPreferences对象中 提供了一系列的get放法每一个方法对应SharedPreferences.Editor中的一个put方法,比如布尔类型的值就用getBoolean()方法,读取一个字符串就用getString()方法。这些方法接收两个参数,第一个参数是键,传入存储数据时使用键就可以得到相应的值了;第二个参数是默认值,表示若当前传入的键找不到对应的值是就将默认值返回。

SQLite数据库存储

1.创建数据库
Android专门提供了一个类用来我们更加方便的管理数据库,就是SQLiteOpenHelper帮助类。
SQLiteOpenHelper是一个抽象类,如果过我们想使用它我们那就必须自己创建类来继承自它。SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类中重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。
SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或者打开一个现有的数据库(若存在则直接打开,若不存在则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入时(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
SQLiteOpenHelper中有两个构造函数可供重写,一般使用参数较少的构造函数即可。这个构造函数接收4个参数,第一个参数是Context。第二个参数是数据库名,创建数据库时使用的就是在这里指定的名称。第三个参数是允许我们在查询数据时返回一个自定义Coursor,一般都是传入null,第四个参数表示当前数据库的版本号,用于对数据库进行升级等操作。
构建出SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()或getWriteableDatabase()方法就能够床创建数据库了。 数据库的操作还有:升级数据库、添加数据更新数据、删除数据、查询数据以及使用SQL操作数据库