繁体   English   中英

如何使用可序列化的类

[英]How to use a Serializable class

我将Backendless用作后端服务,它提供了一个名为BackendlessUser的类用于保存和检索用户。 我试图通过将其作为Serializable额外对象传递给Android上两个活动之间传递一个User:

Intent intent = new Intent(PeopleActivity.this, ConversationActivity.class);
intent.putExtra("withUser", contacts.get(position));
startActivity(intent);

由于类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类,如何解决此问题?

在Android中,您应该使用Parcelable ,它比Serializable更好的性能。 有关如何实现的说明, 请查看此答案

另外,如果您需要在地图对象上使用Parcelable请参见以下答案

编辑:由于Object不是Parcelable尽管您可能想遵循亚历山大的回答,或者甚至更好,使用数据库进行数据持久化

无需传递对象,您可以将对它的引用保存为单例,以便在活动之间可用。

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

public class MyApp extends Application {
  public BackendUser currentUser;
}

然后:

((MyApp)getApplication()).currentUser

您应该使用Parcelable在活动之间传递对象。 Parcelable是Android的Serializable版本,因此您可以使用。 您可以在此处找到有关Parcelable更多信息。

如果您不能修改后端用户,那么最好的选择是使用Alexanders建议并创建UserSingleton实例。 这将允许您从任何活动中创建/更新用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM