2016-11-16 44 views
0

我在我的項目中使用Parceler庫進行序列化。使用Parceler庫序列化領域對象

我有一個RealmObject類是這樣的:

@Parcel(implementations = {ARealmProxy.class}, value = Parcel.Serialization.BEAN, analyze = {A.class}) 
class A extends RealmObject { 

    public int id; 
    public int title; 
} 

我序列化的目的,並把它變成意圖是這樣的:

Intent intent = new Intent(context, Main); 
Bundle bundle = new Bundle(); 
A a = new A(); 
a.id = 10; 
a.title = "title"; 
bundle.putParcelable("mykey", Parcels.wrap(a)) 
intent.putExtras(bundle); 
context.startActivity(intent); 

我反序列化這樣的:

Bundle bundle = getIntent().getExtras(); 
A a = Parcels.unwrap(bundle.getParcelable("mykey")); 
// a's properties are null 

而a的屬性爲空。 我該如何解決這個問題?

回答

0

你需要使用getters/setters。

@Parcel(implementations = {ARealmProxy.class}, 
     value = Parcel.Serialization.BEAN, 
     analyze = {A.class}) 
class A extends RealmObject { 
    @PrimaryKey 
    private int id; 

    private int title; 

    public int getId() { return id; } 
    public void setId(int id) { this.id = id; } 
    public int getTitle() { return title; } 
    public void setTitle(int title) { this.title = title; } 
} 

雖然技術上你不應該創建一個從RealmObject Parcelable對象。您應該通過intent包發送主鍵,並重新查詢其他活動中的對象。

Intent intent = new Intent(context, Main.class); 
Bundle bundle = new Bundle(); 
bundle.putLong("id", 10); 

而且

Bundle bundle = getIntent().getExtras(); 
A a = realm.where(A.class).equalTo(AFields.ID, bundle.getLong("id")).findFirst(); 
+0

我不能只是發送ID來的意圖。因爲它來自服務器,我應該完全發送它 – Hojjat

+0

爲什麼不堅持它的領域? – EpicPandaForce