Android - 具有可序列化对象的 SharedPreferences

android

1个回答

写回答

13230970878

2025-07-09 23:02

+ 关注

Android
Android

使用可序列化对象的 SharedPreferences 可以方便地将复杂的数据结构保存到 Android 设备上。在本文中,我们将介绍如何使用这个功能,并提供一个实际的案例代码。

什么是 SharedPreferences?

SharedPreferences 是 Android 中用于存储轻量级数据的一种机制。它可以保存键值对,类似于一个简单的数据库。SharedPreferences 可以用来存储应用的配置信息、用户偏好设置等。它是一个全局的对象,可以在整个应用中访问。

为什么要使用可序列化对象的 SharedPreferences?

默认情况下,SharedPreferences 只能存储基本数据类型的键值对,如字符串、整数等。但是在实际开发中,我们经常需要存储复杂的数据结构,如自定义对象。这时,就需要使用可序列化对象的 SharedPreferences。

如何使用可序列化对象的 SharedPreferences?

要使用可序列化对象的 SharedPreferences,首先需要将要存储的对象实现 Serializable 接口。Serializable 接口是一个标记接口,表示该对象可以被序列化和反序列化。

接下来,我们需要创建一个 SharedPreferences 对象,并指定其名称和模式。然后,我们可以通过 SharedPreferences.Editor 对象添加数据到 SharedPreferences 中。

下面是一个示例代码,演示了如何使用可序列化对象的 SharedPreferences 来保存和读取一个自定义对象:

Java

// 定义一个自定义对象

public class Person implements Serializable {

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

// 省略 getter 和 setter 方法

}

// 在 Activity 中使用可序列化对象的 SharedPreferences

public class MAInActivity extends AppCompatActivity {

private static final String PREF_NAME = "MyPrefs";

private static final String KEY_PERSON = "person";

private SharedPreferences sharedPreferences;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setcontentView(R.layout.activity_mAIn);

sharedPreferences = getSharedPreferences(PREF_NAME, MODE_PRIVATE);

// 保存对象到 SharedPreferences

Person person = new Person("John", 25);

SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putString(KEY_PERSON, serializeObject(person));

editor.apply();

// 从 SharedPreferences 读取对象

String serializedPerson = sharedPreferences.getString(KEY_PERSON, null);

Person savedPerson = (Person) deserializeObject(serializedPerson);

if (savedPerson != null) {

Toast.makeText(this, "Name: " + savedPerson.getName() + " Age: " + savedPerson.getAge(), Toast.LENGTH_SHORT).show();

}

}

// 将对象序列化为字符串

private String serializeObject(Object object) {

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

try {

ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

objectOutputStream.writeObject(object);

objectOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT);

}

// 将字符串反序列化为对象

private Object deserializeObject(String serializedObject) {

byte[] bytes = Base64.decode(serializedObject, Base64.DEFAULT);

ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);

Object object = null;

try {

ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);

object = objectInputStream.readObject();

objectInputStream.close();

} catch (IOException | ClassNotFoundException e) {

e.printStackTrace();

}

return object;

}

}

示例解析

在上述示例代码中,我们定义了一个简单的 Person 类,并实现了 Serializable 接口。然后,在 MAInActivity 的 onCreate 方法中,我们使用可序列化对象的 SharedPreferences 将一个 Person 对象保存到 SharedPreferences 中,并读取出来显示在 Toast 中。

为了将对象序列化为字符串,我们使用了 ByteArrayOutputStream 和 ObjectOutputStream。为了将字符串反序列化为对象,我们使用了 ByteArrayInputStream 和 ObjectInputStream。注意,在将对象序列化为字符串时,我们使用了 Base64 编码,以便保存到 SharedPreferences 中。

通过使用可序列化对象的 SharedPreferences,我们可以轻松地将复杂的数据结构保存到 Android 设备上。这个功能可以在很多场景中使用,如保存用户的登录信息、应用的配置信息等。希望本文对你了解可序列化对象的 SharedPreferences 有所帮助,并能够在实际开发中应用起来。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号