对于数据存储,android提供了三种方式:
File
SharedPreferences
SQLite
File(文件存储)
文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较适合存储一些简单的文本数据或者二进制数据。对于复杂数据,不适合使用该存储方式。接下来介绍一下File存储的使用方式。
save
通过openFileOutput()来获取一个输出流FileOutputStream(),第一个参数是”存储的文件名”,第二个参数是存储模式,有两种模式,MODE_PRIVATE和MODE_APPEND这两种模式。MODE_PRIVATE是当指定为同样的文件名时,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件中追加内容。不存在就创建。
public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
Log.e(TAG, "文件存储已执行");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
此时,在手机中的data/data/项目包名/下就会出现一个files文件夹,这里面就有我们刚才创建的文件。
当然也可以使用android studio中的工具---Android---Android Device Monitor等待一会打开后,又上角DDMS--File Explore,找到data/data/找到项目文件夹/打开就可以看到files这个文件夹了.
为什么这一块要这么具体的讲呢,是因为我们今天说的三种存储方式的存储位置都在data/data/项目包名/下。
可以点击如图中的右上角标示,导出这个文件,打开查看其中的数据。就是我们刚才写入的数据。
read
/**
* 读取存储的数据
*/
public void readFile() {
FileInputStream inputStream = null;
BufferedInputStream bis = null;
try {
inputStream = openFileInput("data");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = reader.readLine()) != null) {
Log.e(TAG, "" + line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
以上就是文件存储的知识,其实所用到的核心就是Context类中提供的openFileInput和openFileOutput方法,之后就是利用java的各种流来进行读写操作就可以了!
SharedPreferences
不同于文件存储,SharedPreferences 是通过键值对来存储数据的,在使用前,我们需要获取SharedPreferences对象,获取的方式有以下几种方式:
//方法一 自定义命名
SharedPreferences preferences =
getSharedPreferences("shared",MODE_PRIVATE);
//方法二 自动将当前活动的类名作为SharedPreferences
SharedPreferences preferences2 = getPreferences(MODE_PRIVATE);
//方法三 自动使用当前应用的包名作为前缀来命名的
SharedPreferences preferences3 =
PreferenceManager.getDefaultSharedPreferences(this);
上面的三种方式中:
第一种是通过 Context来调用,参数中第一是文件名,如果不存在,就会新创建,第二个是模式,有两种MODE,MODE_PRIVATE和MODE_MULTI_PROCESS,第一种模式是只有当前的应用才可以对文件进行读写,第二个模式是应用于会有多个进程中对同一个Shared文件进行操作。如:shared.xml
第二种是通过当前的Activity来调用的,不过该方法只接收一个参数,因为使用这个方法时,会自动将当前活动的类名作为Shared文件名。如:sharedsave.SharedActivity.xml
第三种,这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。如:com.aofei.no1codedatasave_preferences.xml
接下来就是SharedPreferences的使用了
save
1.调用SharedPreferences对象的edit() 方法获取一个SharedPreferences.Editor对象
2.向Editor对象中添加数据,比如添加一个布尔类型数据就可以使用putBoolean方法,
3.调用commit()方法将添加的数据提交。从而完成数据的存储。
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name", "xiaokai");
editor.putInt("age", 1);
editor.commit();
执行完存储后,可以打开DDMS视图,并点击File ExPlorer切换卡,然后进入到data/data/包名/下可以看到一个shared_prefs文件夹,这下面就存放着我们刚才创建的文件。将这个文件使用相同的方法导出到桌面,打开就可以看到数据格式,我们可以发现数据是以xml的形式来存储的。
read
//方法一
SharedPreferences preferences = getSharedPreferences("shared", MODE_PRIVATE);
//方法二
SharedPreferences preferences2 = getPreferences(MODE_PRIVATE);
//方法三
SharedPreferences preferences3 =
PreferenceManager.getDefaultSharedPreferences(this);
String n1 = preferences.getString("name", "");
String n2 = preferences2.getString("name", "");
String n3 = preferences3.getString("name", "");
Log.e(TAG, n1 + "," + n2 + "," + n3);
通常我们可以使用该存储方式,存储用户名和密码,当然还需要在存储前进行加密。好了,关于SharedPreferences的内容就到这里了。
SQLite
关于数据库的使用,Android系统内置了轻量级的数据库SQLite,因为数据库的使用要比前面两种存储方式要复杂些,这篇文章,就不再添加该部分内容,将SQLite的使用单独写一篇文章来总结。