2010-09-25 148 views
3

我对我的第一个Android应用程序相当遥远,我怀疑我是“做错了”。我的应用程序与Ruby on Rails服务器通信,并通过XML来对象序列化。在我知道发生了什么事之前,我发现自己在编写自己蹩脚的ORM时感到很沮丧,这是一个问题,因为我从高中起就没有编写任何Java。Android对象处理/持久

我在这里的冲突是我希望我的客户端(android)应用程序能够通过各种方法(如HTTP/XML)向本地数据库或本地文件系统进行序列化。我从战略模式开始,但我觉得我的解决方案严重缺乏。

其中之一,我是否应该在客户端重新实现所有Rails模型验证,因为我不知道我是否总是要在另一端使用Rails?更大的问题是,现在我只能将平面对象表示为键值,因为我的代码无法处理像真正的ORM那样的嵌套对象。

我确信Android开发人员一直都在处理这个问题,所以我很想听听其他人如何处理这些问题。

+0

当你最终不得不对象序列,它通常意味着你应该重新评估你的设计 – Falmarri 2010-09-26 05:34:32

回答

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内容中使用REST风格的Web服务。

0

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

否则,我不认为还有其他的解决办法除了可能的话,“铁杆” Serializabled(我怀疑这可能是太多了电话,我可能是错的)

0

寻找到你我的问题有没有感觉到,也许你只是过分复杂化了你的需求?为什么不能只使用JSON格式来以便携方式表示对象数据?然后,您将能够将其存储在文件系统或简单文本字段中的数据库中。您可以利用透明DB持久性(http://code.google.com/p/android-active-record)

1

黑森州是伟大的RPC Android的活跃记录库。你不必自己做任何序列化。它不使用XML,因此它对于移动平台更加高效和更加合适。