【问题标题】:Getting the database ID of the newly saved data and passing it to previous activity获取新保存数据的数据库 ID 并将其传递给之前的活动
【发布时间】:2016-03-10 18:04:33
【问题描述】:

我的工作流程如下图所示。

  1. 点击Home活动中的“新建”条目按钮
  2. NewEntry活动中输入条目详细信息
  3. NewEntry活动中点击“保存”
  4. 导航回Home活动

当我导航回Home 活动时,我使用setResult(RESULT_OK, intent); 函数将新条目详细信息从NewEntry 活动传递到Home 活动。

我也可以接收数据,除了新保存的数据的数据库ID。我在另一个线程中使用AsyncTask.execute() 将新条目数据保存到数据库中。只有将条目保存在数据库中后,我才会在回调函数中获取条目的ID

但是,一旦我按下后退按钮并保存条目 AsyncTask 就会被调用,它会导航回 Home 活动。由于在 AsyncTask 执行完成之前没有为新条目设置 ID,因此我在收到的意图中的 Home 活动中没有得到 ID 的值。

我想获取ID 的数据库值并将其传递给Home 活动以用于其他目的。这样我就不必刷新Home活动中的整个列表来显示新条目

有没有办法做到这一点?

【问题讨论】:

  • 只是一个建议,生成本地 UUID 并将其用作 ID,使其不会发生冲突。
  • @maytham-ɯɐɥʇʎɐɯ 谢谢。我确实想过像这样生成一个唯一的 ID。但是,我只是想看看是否有更有效的方法来做到这一点。
  • 没问题,顺便说一句,你在 ITU 上吗

标签: android listview android-activity android-asynctask android-sqlite


【解决方案1】:

您可以从 AsyncTask 发送广播,或使用 GreenRobot 或 Otto 等事件总线。

但是更好的解决方案是在您的主要活动中添加一个加载器,因此每当数据库中发生变化时,它都会重新加载数据,因此您无需将数据传回 onResult 中,然后将 ID 传递给晚点。使用加载器和内容提供程序(假设您使用的是 SQLite 数据库)将免费为您完成所有工作。

【讨论】:

  • 我会阅读更多关于使用加载器的信息。但是,我目前在应用程序中遵循 MVP 模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多