如何使用可序列化 class

How to use a Serializable class

我正在使用 Backendless 作为后端服务,它提供了一个名为 BackendlessUser 的 class 用于保存和检索用户。我试图通过将用户作为 Serializable extra:

在 Android 上的两个活动之间传递
Intent intent = new Intent(PeopleActivity.this, ConversationActivity.class);
intent.putExtra("withUser", contacts.get(position));
startActivity(intent);

自 class BackendlessUser 实施 Serializable。但是当我 运行 它时,它给了我这个错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.backendless.BackendlessUser)
at android.os.Parcel.writeSerializable(Parcel.java:1468)
at android.os.Parcel.writeValue(Parcel.java:1416)
....
Caused by: java.io.NotSerializableException: java.lang.Object
....

我认为,由于这个变量:

public final class BackendlessUser implements Serializable {
    private final Map<String, Object> properties = new HashMap<String, Object>();
...

考虑到我无法修改 BackendlessUser class,如何解决这个问题?

在 Android 中,您应该使用 Parcelable,它提供比 Serializable 更好的性能。有关如何实现它的解释 take a look at this answer

此外,如果您需要在地图对象上使用 Parcelablesee this answer

编辑:因为 Object 不是 Parcelable,尽管您可能想遵循 Alexander 的回答,或者更好的是,使用数据库进行数据持久化

您可以在单例中保存对它的引用,而不是传递对象,以便它在活动之间可用。

您可以扩展应用程序 class 并保存在那里。应用程序 class 一直存在,而您的应用程序 运行 是单例应用程序。

public class MyApp extends Application {
  public BackendUser currentUser;
}

然后:

((MyApp)getApplication()).currentUser

您应该使用 Parcelable 在活动之间传递对象。 Parcelable 是 Android 的 Serializable 版本,因此您可以使用它。您可以在 Parcelable here.

上找到更多信息

如果您无法修改后端用户,最好的办法是使用 Alexanders 的建议并创建 UserSingleton 实例。这将允许您 create/update 来自任何 activity 的用户。