android - 更改 Activity 时保留对象

标签 android android-intent android-activity serialization

我目前面临在 Android 应用程序中持久化对象状态的问题。

我有某种多层次的主从流程。

例如,我有一个 Client 列表。每个 Client 都有多个 Order,每个 Order 都有多个文章。

到目前为止,我做了以下事情:

  • 当您在 MasterActivity 中单击一个 Client 时,我将 Client 写入 Bundle 并打开 DetailActivity.
  • DetailActivity 中,我从 Bundle 中读取了 Client 并显示了它。

这在大多数时候都或多或少地工作得很好,但是现在发生了,一个对象太大而无法序列化(例如一个 Client 有很多 Order s).

因此我只想序列化 Client 的 ID,并从 DetailActivity 中的数据库加载它。通常这种方法效果很好,但我有一种情况不起作用:

只有当您保存Order(它们的Master)时,才会保存Article。因此,如果您为 Order 创建一个新的 Article 并且不保存 Order,则 Article 是'也保存了。

这意味着,我总是需要拥有完整的对象,重新加载它 从 DetailActivity 中的数据库意味着,我丢失了所有未保存的更改。但是,坚持使用 Bundle 可能会超出限制 ( 500kB to 1MB )。

所以我的问题是,保存此类数据的首选方式是什么?

最佳答案

更好的方法是创建您自己的单例类,它指向您要在 Activity 之间传输的数据。

我建议具有 Article articleToPass 的 DataManager 单例 Activity 让二传手将 articleToPass 设置为指向您想要的内容。 和 getter 或 reader,将读取获取文章并使 articleToPass 无效。

使用此 DataManager 单例管理您的应用程序数据(此 dataManager 单例可以在扩展的 Application 类或 MainActivity 中初始化)。

如果您必须在应用程序销毁和加载时保留对象:

  1. 从 Article 对象创建一个数据库条目,其中包含您需要的所有数据(我看不出为什么要在此处保存您不需要的数据)
  2. 将所有数据转储到某个文件(使用共享首选项、键和值)
  3. 当进入详细信息屏幕时,您需要向您的服务器查询,通过 ID 等请求您需要的所有数据。
  4. 将您需要的所有对象转换为 JSON(只需使用 GSON),并将 JSON 转储到文件中,并在需要时加载它。

我认为上面的解决方案就足够了:)希望我能帮上忙

关于android - 更改 Activity 时保留对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063350/

相关文章:

java - 错误 "could not find article that just added to db: 5576330055082049537"将共享发布到 LinkedIn

android - 每次方向改变后都会重新创建 fragment ,无法恢复状态

android - 对 SEND 操作 Intent 的权限拒绝

android的 Activity 扩展器

android - 在 Android 应用程序中退出 Google 和 Facebook

android - admob广告大部分时间点不了

android - 无法使用 Cordova CLI 7.0.0 添加平台

java - 在 Intent 启动时清除 Activity 堆栈

android - 谷歌地图 Intent - 避开高速公路和收费站? (安卓)

java - 无法通过 Intent 附加传递对象数组