如何使用Serializable类

时间:2017-04-09 10:01:01

标签: java android object serialization backendless

我使用Backendless作为后端服务,它提供了一个名为BackendlessUser的类来保存和检索用户。我尝试在Android上的两个活动之间传递用户,方法是将其作为Serializable额外传递:

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类?

,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

在Android中,你应该使用Parcelable,与Serializable相比,它提供了更好的表现。有关如何实施它的解释take a look at this answer

此外,如果您需要在地图对象see this answer

上使用Parcelable

编辑:因为Object不是Parcelable,但你可能想要关注亚历山大的回答,或者更好的是,使用数据库来保持数据持久性

答案 1 :(得分:1)

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

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

public class MyApp extends Application {
  public BackendUser currentUser;
}

然后:

((MyApp)getApplication()).currentUser

答案 2 :(得分:0)

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

如果您无法修改后端用户,最好的办法是使用Alexanders建议并创建Singleton User实例。这将允许您从任何活动创建/更新您的用户。