我使用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
类?
答案 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
实例。这将允许您从任何活动创建/更新您的用户。