簡體   English   中英

如何使用可序列化的類

[英]How to use a Serializable class

我將Backendless用作后端服務,它提供了一個名為BackendlessUser的類用於保存和檢索用戶。 我試圖通過將其作為Serializable額外對象傳遞給Android上兩個活動之間傳遞一個User:

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類,如何解決此問題?

在Android中,您應該使用Parcelable ,它比Serializable更好的性能。 有關如何實現的說明, 請查看此答案

另外,如果您需要在地圖對象上使用Parcelable請參見以下答案

編輯:由於Object不是Parcelable盡管您可能想遵循亞歷山大的回答,或者甚至更好,使用數據庫進行數據持久化

無需傳遞對象,您可以將對它的引用保存為單例,以便在活動之間可用。

您可以擴展Application類並保存在那里。 Application類在您的應用程序運行時一直存在,並且是單例。

public class MyApp extends Application {
  public BackendUser currentUser;
}

然后:

((MyApp)getApplication()).currentUser

您應該使用Parcelable在活動之間傳遞對象。 Parcelable是Android的Serializable版本,因此您可以使用。 您可以在此處找到有關Parcelable更多信息。

如果您不能修改后端用戶,那么最好的選擇是使用Alexanders建議並創建UserSingleton實例。 這將允許您從任何活動中創建/更新用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM