2017-04-09 42 views
0

我将Backendless用作后端服务,它提供了一个名为BackendlessUser的类来保存和检索用户。我试图把它当作Serializable额外转嫁Android的两项活动之间的用户:如何使用可序列化类

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

回答

1

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

您可以扩展Application类并保存在那里。应用程序类一直存在,而您的应用程序正在运行并且是单身人士。

public class MyApp extends Application { 
    public BackendUser currentUser; 
} 

然后:

((MyApp)getApplication()).currentUser 
+0

好的,谢谢你的建议 –

2

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

另外,如果您需要在地图对象上使用Parcelable的解释,see this answer

编辑:既然Object不是Parcelable虽然你可能想追随亚历山大的回答,或者甚至更好地,使用数据库来保存数据

+1

也许你可以解释他该怎么做才能解决这个问题*考虑到我无法修改BackendlessUser类,我该如何解决这个问题?* – Blackbelt

+0

是的,但是他究竟如何将他的课程保存在那里呢? –

0

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

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

+0

他不能修改他的班级,Parcelable会如何帮助? –

+0

@AlexanderKulyakhtin在我回答这个问题后,他补充了这一要求。我会更新它。 – BlackHatSamurai