【问题标题】:Android object handling / persistenceAndroid 对象处理/持久化
【发布时间】:2010-09-25 18:02:33
【问题描述】:

我对我的第一个 Android 应用程序的了解还很远,但我偷偷怀疑我“做错了”。我的应用程序与 Ruby on Rails 服务器通信并通过 XML 来回序列化对象。在我知道发生了什么之前,我发现自己正在编写自己糟糕的 ORM,这个问题由于我从高中以来就没有写过任何 Java 的事实而变得更加复杂。

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

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

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

【问题讨论】:

  • 当你最终不得不序列化对象时,通常意味着你应该重新评估你的设计

标签: java android orm


【解决方案1】:

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

我尚未将 Android 对象写入 SQLite,但我已将它们作为 Parcelable 对象和 SharedPreferences 写入。对于中小型应用程序,这两种策略都足够了。对于数据密集型应用程序,显然您必须更进一步地使用 SQLite。

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

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

我会避免在 Android 中克隆您的服务器端对象和验证,因为如果您进行小的更改,则需要同时修改这两个源。服务器应该处理所有数据和验证,而您应该只是从 Android 请求、缓存和发送数据。

我很想知道将对象写入 SQLite 是否有任何挑战,但我想这与我上面概述的细节相比并没有那么大的一步。希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      否则我认为除了可能的“硬核”序列化之外没有其他解决方案(我怀疑这对于手机来说可能太多了,我可能错了)

      【讨论】:

        【解决方案4】:

        我认为您可能对智能手机应用程序过于沉重。我会考虑使用带有 JSON 内容的 RESTful 风格的 Web 服务。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2011-11-13
            • 1970-01-01
            • 2018-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-10
            • 1970-01-01
            相关资源
            最近更新 更多