Android SharedPreferences 存取对象
简介
在 Android 开发中,我们经常需要存储一些用户的配置信息或者应用的状态。SharedPreferences 是 Android 提供的一种轻量级的数据存储方式,它以键值对的形式存储数据,并且可以跨越不同的 Activity 或 Fragment 使用。
本文将介绍如何使用 SharedPreferences 存取对象,并提供一些代码示例来帮助读者更好地理解。
SharedPreferences 概述
SharedPreferences 是一个 XML 文件,用于存储键值对数据。每个 SharedPreferences 文件都有一个唯一的名称,可以通过该名称来创建或者获取该文件的实例。
SharedPreferences 文件存储在应用的私有目录下,其他应用无法访问。每个应用都有自己独立的 SharedPreferences 文件,不同应用之间的 SharedPreferences 文件不会互相干扰。
SharedPreferences 文件可以通过 Context 类的 getSharedPreferences() 方法来获取,该方法接受两个参数:文件名称和访问权限模式。访问权限模式有两种:MODE_PRIVATE 和 MODE_MULTI_PROCESS。
存储对象
在 Android 中,SharedPreferences 只能存储基本数据类型,如字符串、整数、浮点数等。但我们可以通过一些技巧将对象转化为可存储的格式,从而实现存储对象的功能。
最常见的做法是将对象转化为 JSON 字符串,然后存储该字符串。在需要获取对象时,再将 JSON 字符串转化为对象。Android 提供了 Gson 库来帮助我们进行 JSON 格式和对象之间的转换。
下面是一个示例,演示了如何使用 SharedPreferences 存储和获取一个自定义对象:
// 定义一个自定义对象
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 省略 getter 和 setter 方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
// 存储对象
public void saveUser(User user) {
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
// 使用 Gson 将对象转化为 JSON 字符串
Gson gson = new Gson();
String json = gson.toJson(user);
editor.putString("user", json);
editor.apply();
}
// 获取对象
public User getUser() {
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
// 获取 JSON 字符串
String json = sharedPreferences.getString("user", "");
// 使用 Gson 将 JSON 字符串转化为对象
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
return user;
}
上述代码中,我们定义了一个 User 类作为示例的自定义对象。在存储对象时,我们使用 Gson 库将对象转化为 JSON 字符串,并将该字符串存储到 SharedPreferences 文件中。在获取对象时,我们先从 SharedPreferences 文件中获取 JSON 字符串,然后使用 Gson 将该字符串转化为对象。
需要注意的是,存储和获取对象的方法应该在同一个 SharedPreferences 文件中执行,以保证数据的一致性。
示例应用
为了更好地理解 SharedPreferences 存取对象的应用场景,我们创建一个简单的示例应用。该应用允许用户输入自己的姓名和年龄,并保存在 SharedPreferences 中,以便下次打开应用时直接获取。
下面是示例应用的代码:
public class MainActivity extends AppCompatActivity {
private EditText etName;
private EditText etAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = findViewById(R.id.et_name);
etAge = findViewById(R.id.et_age);
// 读取保存的用户信息
User user = getUser();
if (user != null) {
etName.setText(user.getName());
etAge.setText(String.valueOf(user.getAge()));
}
}
public void onSaveClick(View view) {
String name = etName.getText().toString();
int age = Integer.parseInt(etAge.getText().toString());
User user = new User(name, age);
saveUser(user);
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
}
private void saveUser(User user) {
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE