您的位置:首页 > 移动开发 > Android开发

Android学习笔记(十四)

2015-09-13 21:37 337 查看
Android中的数据存储

数据持久化就是指那些内存中的瞬时数据保存到存储设备中。Android系统中主要提供了三种方式用于简单地实现

数据持久功能,即文件存储、SharedPreferences存储和数据库存储。

1.文件存储是Android中一种基本的存储方式,它不对存储的内容进行任何的格式化处理,所有的数据是原封不动的

保存到文件中。

1.1

Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件。

这个方法接收两个参数:

1.第一个参数是文件名,(文件名中不可以包含路径,所有的文件都是默认保存在/data/data/<package name>/files/目录下)。

2.第二个参数是文件的操作模式,(主要有两种操作模式可选:1.MODE_PRIVATE和MODE_APPEND,其中

MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容;

MODE_APPEND表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。)

openFileOutput()方法返回的是一个FileOutputStream对象,得到这个对象后就可以使用Java流的方式将数据写在文件中了。

下面的代码,展示了如何把一段文本内容写在文件中:

public void save (String inputText) {
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(inputText);
} catch (IOException e) {
e.printStackTrace();
}finally {

try {
if (writer != null){
writer.close();
}

} catch (IOException e) {
e.printStackTrace();

}
}
}


上述的代码中,通过openFileOutput()方法能够得到一个FileOutputStream对象,然后在借助它构建出一个

OutputStreamWriter对象,接着再使用OutputStreamWriter构建出一个BufferedWriter对象,这样就可以通过

BufferedWriter来将文本内容写入到文件中了。

1.2

Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。

这个方法只接收一个参数,即要读取的文件名,然后系统会自动到/data/data/<package name>/files/目录下

去加载这个文件,并返回一个FileInputStream对象,得到这个对象后通过java流的方式可以将数据读取出来了。

下面是代码示例,展示如何从文件中读取文本数据:

FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();

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();
}
}
}
return content.toString();
}


上述的代码中,首先通过openFileInput()方法获取得到一个FileInputStream对象,然后借助它构建出一个InputStreamReader对象,

接着再使用InputStreamReader构建出一个BufferedReader对象,这样就可以使用BufferedReader进行一行行地读取,把文件

中的内容全部读取出来并存在在一个StringBuilder对象中,最后将读取的内容返回即可。

2.SharedPreferences是使用键值对的方式来存储数据的。

2.1

要用sharedPreferences来存储数据,首先需要获取到SharedPreferences对象。Android中主要提供了三种方法用于

得到SharedPreferences对象。

1).Context类中的getSharedPreferences()方法

该方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件名称不存在则会创建一个,

SharedPreferences文件都是存在/data/data/<package name>/shared_prefs/目录下的;

第二个参数用于指定操作模式,主要有两种模式可以选择,MODE_PRIVATE和MODE_MULTI_PROCESS。

其中MODE_PRIVATE是默认的操作模式,表示只有当前的应用程序才可以对这个sharedPreferences文件进行读写。

MODE_MULTI_PROCESS一般用于对个进程中对同一个SharedPreferences文件进行读写的情况。

2).Activity类中的getPreferences()方法

3).preferenceManager类中的getDefaultSharedPreferences()方法

得到了SharedPreferences对象之后,就可以向文件中存储数据了,主要可以分为三部实现:

1).调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。

2).向SharedPreferences.Editor对象中添加数据。比如添加一个字符串就用putString()方法.

3).调用commit()方法将添加的数据提交.

具体实现如下面的代码所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save_data"/>

</LinearLayout>


设置一个按钮,用于存储数据到文件中。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

saveData = (Button) findViewById(R.id.save_data);

//对saveData设置监听器
saveData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
//Context类中的getSharedPreferences()方法来获取SharedPreferences对象,该方法接收两个参数
//1.第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在,则会创建一个。
//2.第二个参数用于指定操作模式,主要有两种操作模式可选(MODE_PRIVATE和MODE_MULTI_PROCESS)
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
//向SharedPreferences.Editor对象中添加数据。比如添加一个字符串就用putString()方法
editor.putString("name","Tom");
editor.putInt("age",22);
//调用commit()方法将添加的数据提交
editor.commit();
}
});


上述的代码中,点击按钮通过getSharedPreferences()方法得到SharedPreferences的文件名为data,并得到了

SharedPreferences.Editor的对象。接着添加数据,最后调用commit() 方法进行提交。

2.2

从SharedPreferences中读取数据

SharedPreferences对象中提供了一系列的get方法用于对存储的数据进行读取,每种get方法都对应了

SharePreferences.Editor中的一种put方法。

具体的实现如下面的代码所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/save_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/save_data"/>

<Button
android:id="@+id/restore_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/restore_data"/>

</LinearLayout>


修改MainActivity中的代码,如下图所示:

restoreData = (Button) findViewById(R.id.restore_data);
//对restoreData按钮设置监听器
restoreData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过getSharedPreferences()方法得到SharedPreferences的对象
SharedPreferences sharedPre = getSharedPreferences("data", MODE_PRIVATE);
//通过get方法得到数据
String name = sharedPre.getString("name","");
int age = sharedPre.getInt("age", 0);

Log.d("MainActivity","name is " + name);
Log.d("MainActivity","age is " + age);

}
});


上述的代码中,首先通过getSharedPreferences()方法得到了SharedPreferences对象,然后调用get方法获取数据,

如果没有找到相应的值就会使用方法中传入的默认值来代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: