(由自己的新浪博客转移,原文作于:2016.4.4)
1.数据持久化技术
数据持久化就是指将那些内存中的瞬时数据保存到储存设备中,保证即使在手机或电脑关机情况下,这些数据仍然不会丢失。(保存在内存中的数据是处于瞬时状态的,而保存在储存设备中的数据是处于持久状态的。)
Android系统中主要提供三种方式用于简单地实现数据持久化功能:a.文件存储。b.SharedPreference存储。c.数据库存储。
2.文件存储
Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文档中,因而它比较适合用于储存一些简单的文本数据或二进制数据。
Contect类中提供了一个openFileOutput()方法,可以用于将数据储存到指定的文件中。这个方法接受两个参数,第一个参数是文件名,在创建的时候使用的就是这个名称(不能包含路径);第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND,前者为默认模式,当指定为同样文件名的时候,会进行覆写;后者则表示如果该文件已经存在就在往文件里面追加内容,不存在就创建。
openFileOutput()方法返回的值是一个FileOutputStream对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中。
储存:
public class MainActivity extends Activity {
private EditText edit;
@Override
protected void onCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText) findViewById(R.id.edit);
}
@Override
protected void onDestroy() {
super.onDestroy();
String inputText = edit.getText().toString();
save(inputText);
}
public void save(String inputText) {
FileOutputStream out = null;
BufferWriter writer = null;
try
{
out = openFileOutput("data", Context.MODE_PRIVATE);
write = new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
}
catch (IOException e)
{
e.printStackTrace();
}finally{
try
{
if(writer != null){
writer.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
读取:
与储存操作类似。Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。该方法只接收一个参数,即要读取的文件名,并返回一个FileInputStream对象。得到这个对象再通过Java流的方式将数据读取出来。
public class MainActivity extends Activity {
private EditText edit;
@Override
protected void onCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText) findViewById(R.id.edit);
String inputText = load();
if (!TextUtils.isEmpty(inputText)) {
edit.setText(inputText);
edit.setSelection(inputText.length());
Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show();
}
}
public String load() {
FileInputStream in = null;
BufferReader reader = null;
try
{
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
}catch (IOException e) {
e.printStackTrace();
}finally{
if(reader != null) {
try {
reader.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.SharedPreferences
SharedPreferences是使用键值对的方式来存储数据的。保存一条数据的时候需要给这条数据一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。并且它支持多种不用数据类型的存储,存储什么数据类型读取出来的也是相应的数据类型。
使用方法:
首先需要获取到SharedPreferences对象。Android提供了三种方法。
得到了SharedPreferences对象之后就可以进行储存操作了。a.Context类中的getSharedPreferences()方法
接收2个参数,第一个参数用于指定SharedPreferences文件名(不存在则创建一个)。第二个用于指定操作模式,MODE_PRIVATE表示当前应用程序才能对该文件进行读写情况;MODE_MULTI_PRECESS用于会又多个进程对同一个SharedPreferences文件进行读写。
b.Activity类中的getPreferences()方法
遇上法相似,但只接收一个操作模式参数。
c.PreferencesManager类中的getDefaultSharedPreferences()方法
这是一个静态方法,只接收一个Context参数。
调用SharedPreferences对象的edit()方法获取一个SharedPreferences.Editor对象。
向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean方法,添加一个字符串则使用putString()方法。
调用commit()方法将添加的数据提交。
SharedPreferences数据读取:
SharedPreferences对象提供了一系列的get方法,读取布尔型数据就用getBoolean(),读取字符串就用getString()方法,以此类推。这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。
4.其他储存相关