2017-01-23 53 views
0

在Android開發的一個項目中使用Parcelable,Realm和GSON可以嗎?我只是想知道如何同時實現它,因爲每個這樣的庫/框架在製作POJO時都有不同的註釋。另一個是Realm和Parcelable都堅持數據,所以我需要實現這兩個?在Android開發中使用Parcelable,Realm和GSON

+0

類,方法等可以有多個註釋。 – CommonsWare

+0

如果我使用領域實現Parcelable會怎樣? – vidalbenjoe

+0

怎麼樣?我沒有使用過Realm,但'Parcelable'並沒有對實現提出很多限制,所以如果Realm發生衝突,我會感到驚訝。 – CommonsWare

回答

0

這應該是沒有問題的,因爲您可以對一個方法或一個類使用多個批註。 如果標註有相同的名字,你應該給它像@java.lang.Override完全相同包名

1

GSON曾經有境界的詭異和需要進行以下配置

Gson gson = new GsonBuilder() 
.setExclusionStrategies(new ExclusionStrategy() { 
    @Override 
    public boolean shouldSkipField(FieldAttributes f) { 
     return f.getDeclaringClass().equals(RealmObject.class); 
    } 

    @Override 
    public boolean shouldSkipClass(Class<?> clazz) { 
     return false; 
    } 
}) 
.create(); 

GSON使用field reflection閱讀來自對象的數據,這意味着在託管的RealmObjects上,您的字段將爲null值。

這是因爲GSON也不提供使用訪問器來獲取數據的選項,但Realm代理不會將數據複製到內存。

如果您需要一個對象,可以通過使用@Body註釋進行改進來發送,並且是受管理的RealmObject,當您需要執行apiService.sendObject(realm.copyFromRealm(myObject));時。


Parcelable沒有必要在大多數情況下RealmObject,因爲這是由域管理的任何對象已經堅持着,並且容易獲得,只要任何地方,你有其主鍵。

但是,如果你需要數據的超然修改副本和你在使用類的非託管的情況下直接建立你打算保存對象彎曲,那麼你就可以輕鬆地創建使用ParcelerParcelable類。



簡而言之:

  • RealmObjects很容易持久化使用Parceler到Parcelable,但你通常並不需要它,你只要發送活動,而不是整個物體之間的主鍵
  • GSON不適用於託管對象,因爲GSON is kinda dumb因此您需要先製作內存中的副本


就個人而言,我寧願讓我的API響應和我分開RealmModels,這是如果依靠映射更優化的架構更容易。