2017-04-09 78 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