安卓对象处理/持久化

3
我已经开始开发我的第一个Android应用程序,但我有一种隐约的感觉,认为我做得不太对。我的应用程序通过XML与一个Ruby on Rails服务器通信并序列化对象。在我意识到之前,我发现自己深陷于编写自己糟糕的ORM中,这个问题更加复杂,因为我自高中以来就没有写过Java了。
我的困境在于,我希望我的客户端(Android)应用程序能够通过各种方法进行序列化,例如HTTP/XML、本地数据库或本地文件系统。我最初采用了策略模式,但我觉得我的解决方案很糟糕。
首先,我是否应该在客户端重新实现所有Rails模型验证,因为我不知道将来是否会始终使用Rails?更大的问题是,目前我只能将扁平对象表示为键值对,而我的代码无法处理像真正的ORM那样的嵌套对象。
我相信Android开发人员经常处理这些问题,所以我很想听听其他人是如何应对这些问题的。

当你不得不序列化对象时,通常意味着你应该重新评估你的设计。 - Falmarri
5个回答

1
Hessian非常适合进行RPC。您不必自己进行任何序列化。它不使用XML,因此更高效,也更适合移动平台。

1

我不会将您的Android应用程序视为Ruby应用程序的扩展,而是作为API的使用者。如果您可以尝试将服务器应用程序公开为JSON(或其他格式,但JSON最轻巧),并从Android应用程序中使用这些API,则最有可能会遇到较少问题,因为JSON已经处于K/V格式。

我还没有将Android对象写入SQLite,但我已将它们编写为Parcelable对象并写入SharedPreferences。对于小型到中型的应用程序,这两种策略都足够。对于数据密集型应用程序,显然您将不得不更进一步使用SQLite。

这些方法有一些很棒的文章:Managing State

关键在于以易于序列化的方式设计对象。这意味着没有循环引用或极其复杂的对象。这不应该是一个很大的问题,特别是如果您的数据已经是JSON格式。您只需扩展一些类并添加函数,返回Parcelable对象表示或字符串表示,以便保存您的对象。

我建议避免在Android中克隆你的服务器端对象和验证,因为这样需要修改两个源代码文件,如果你进行小的更改。服务器应该处理所有数据和验证,而你只需要从Android请求、缓存和发送数据。

我很想听听将对象写入SQLite是否存在任何挑战,但我想这不会比我上面概述的细节更困难。希望这能在某种程度上帮到你!


0
看了你的问题,我感觉你可能把需求过于复杂化了?为什么不能使用JSON格式以一种可移植的方式表示对象数据呢?然后你就可以将其存储在文件系统或数据库中的简单文本字段中。你可以利用android-active-record库实现透明的数据库持久性(http://code.google.com/p/android-active-record)。

0

我认为你可能在为智能手机应用程序做过多的工作。我建议考虑使用RESTful风格的Web服务和JSON内容。


0

我在Android上还没有进行过太多的持久性存储,但我认为您需要使用SQLiteDatabase并创建自己的Cusor,以对对象进行序列化/反序列化,以便将其添加到数据库中。一个可能的解决方案是扩展SQLiteCursor或AbstractCursor。

否则,我认为除了“硬核”Serializabled之外,可能没有其他解决方案(我怀疑这对手机来说可能太过分了,但我可能是错的)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接