2011-04-03 106 views
0

我正在編寫一個與Google App Engine服務器交談的Android應用程序。服務器保存持久性數據,它使用PersistenceManager存儲和提取。我有這樣的設置現在的方法如下:從GAE PersistenceManger發送對象到Android

  • 稱爲StoredThingToRemember服務器上的@PersistenceCapable類具有信息記憶,以及一些GAE對象持久爵士樂。
  • 當Android客戶端想要獲取一個ThingToRemember,它發送一個HTTP請求給服務器,其獲取從PersistenceManager一個StoredThingToRemember,其轉換爲ThingToRemember implements Serializable,其序列化爲一個byte[],然後在HTTP響應發送。
  • 客戶端反序列化ThingToRemember並使用它。

這個工程,但它似乎不起眼。理想情況下,我想序列化併發送StoredThingToRemember本身。不幸的是,這似乎需要將所有的GAE對象持久化類放在Android應用程序中,這看起來很愚蠢和浪費。

從GAE持久性中獲取對象然後在Android應用程序中使用該對象的正確方法是什麼?

回答

2

使用序列化格式傳輸數據通常具有相當的風險 - 它們通常不是針對信任域而設計的。此外,通過這樣做,您可以鎖定自己的位置 - 您的客戶端和服務器都必須以Java編寫。任何更多的客戶都必須用Java編寫,否則將需要一個全新的界面。

相反,您應該序列化爲與語言無關的格式,例如XML或JSON。

+0

在串行化和反序列化結束時,您將使用哪個類來實現此目的? – 2011-04-03 23:59:23

+0

@Andrew類是次要的。您應該研究序列化框架 - 選擇一種適合的格式(XML對於Java來說很典型,可能有很好的內置庫; JSON是一個很好的選項,通常易於讀寫),然後遵循其標準序列化數據的方法。 – 2011-04-04 00:01:58

+0

我同意使用Java的內置序列化格式在這裏可能不是一個好主意。不過,我強烈建議不要使用XML(壞數據模型)。 JSON不錯,但像Google Protocol Buffers或Apache Thrift這樣的東西會更好一些(有很多語言的實現;它們處理一些結構驗證;它們都具有文本格式和具有更好性能的等效二進制格式) 。其他工具:https://github.com/eishay/jvm-serializers/wiki/ToolBehavior – 2011-04-04 06:30:02