如何使用可序列化 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
此外,如果您需要在地图对象上使用 Parcelable
,see 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 的建议并创建 User
的 Singleton
实例。这将允许您 create/update 来自任何 activity 的用户。
我正在使用 Backendless 作为后端服务,它提供了一个名为 BackendlessUser
的 class 用于保存和检索用户。我试图通过将用户作为 Serializable
extra:
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
此外,如果您需要在地图对象上使用 Parcelable
,see 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 的建议并创建 User
的 Singleton
实例。这将允许您 create/update 来自任何 activity 的用户。