📌  相关文章
📜  如何在 Android 中将可序列化对象从一个活动传递到另一个活动?(1)

📅  最后修改于: 2023-12-03 15:38:12.488000             🧑  作者: Mango

如何在 Android 中将可序列化对象从一个活动传递到另一个活动?

在 Android 应用程序中,有时需要将一个对象从一个活动(Activity)传递到另一个活动,或者将其保存在数据存储中。如果要传递或保存可序列化对象,可以将它们序列化为字节数组,然后传递或保存字节数组。

1. 实现可序列化接口

首先要将对象类实现 Serializable 接口,使得该对象可以被序列化。

public class MyClass implements Serializable {
    // 类定义
}
2. 将对象转换为字节数组

在发起对象传递或保存操作前,需要将对象转换为字节数组。

MyClass obj = new MyClass();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(obj);
byte[] bytes = bos.toByteArray();
3. 从字节数组中恢复对象

在接收对象时,需要将传递的字节数组转换回对象。

byte[] bytes = // 从 Activity 中获取字节数组
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream in = new ObjectInputStream(bis);
MyClass obj = (MyClass) in.readObject();
4. 在 Intent 中传递可序列化对象

在将可序列化对象通过 Intent 传递到另一个活动时,可以使用 putExtra 方法,并将传递的对象转换为字节数组。

MyClass obj = new MyClass();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("myObject", obj.toByteArray());
startActivity(intent);

在第二个 Activity 中,使用 getByteArrayExtra 方法获取传递的字节数组。

byte[] bytes = getIntent().getByteArrayExtra("myObject");
5. 在数据存储中保存可序列化对象

如果需要将可序列化对象保存在数据存储中,可以将其序列化为字节数组,并使用 SharedPreferences 或文件存储将其保存。

MyClass obj = new MyClass();
SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("myObject", Base64.encodeToString(obj.toByteArray(), Base64.DEFAULT));
editor.apply();

在需要使用该对象时,从 SharedPreferences 或者文件中读取字节数组,并将其转换为对象。

SharedPreferences preferences = getSharedPreferences("myPref", MODE_PRIVATE);
String strObj = preferences.getString("myObject", "");
byte[] bytes = Base64.decode(strObj, Base64.DEFAULT);
MyClass obj = (MyClass) in.readObject();

以上是在 Android 中将可序列化对象从一个活动传递到另一个活动的介绍。通过将对象序列化为字节数组并在传递或保存时使用,可以很容易地进行对象传递和保存操作。