我正在开发我的第一个应用程序。 该应用程序基本上只是用于填充数据库的一系列表单。 我有两个问题,我希望有更多经验的人可以指出我的解决方案。
为了说明这个问题,假设我有三个活动,用户将通过这些活动最终为数据库创建一个记录。 用户在活动 1 上输入两条信息。 该信息将另存为两个意图附加内容,并传递给活动 2。 在活动 2 中,又添加了三条信息,现在将五个意图附加内容传递给活动 3。 在 Activity3 中,再添加四条信息,然后通过 SQLite 查询将所有九条信息写入数据库。 只要用户按此顺序执行这些操作,一切都很好。 如果用户必须导航回上一个活动才能更改或修复某些内容,则会出现问题。
问题1:如果用户在 Activity2 中添加了新信息,然后想要返回并修复 Activity1 中的某些内容,则向后导航将丢失所有新信息,因为 Activity1 最初不需要创建任何意向。 如果用户一直返回到活动 3 并希望返回到活动 1,则返回活动 2 和活动 1 将丢失所有这些意图。 我通过创建一个 if.intents.extra.exists 语句来确定 Activity1 是从原始的"开始新记录"源打开还是从将来的活动导航回来,从而在一定程度上解决了这个问题。 但是,如果用户仅部分填写 Activity2,则常规的 if/then 语句可能无法捕获场景。 相反,我不得不为可能在整个活动系列中生成的所有潜在意图附加内容编写一个单独的 if.intent.extras.exists 语句,并将它们放在每个活动的 onCreate 行中。 此外,即使特定的传入 intent.extra 未用于该表单,我仍然必须解压缩它,将其分配给字符串值,然后将其写回 intent.extra 以用于下一个活动。 尽管这种方法在技术上有效,但我不敢相信这是"正确"的做事方式。 我是否应该使用 intent.extras 以外的其他东西在活动之间传递此信息并使向前和向后导航不那么麻烦? 作为旁注,我的应用程序具有三个以上的活动,并且我正在跟踪的不仅仅是九条信息。
问题2:当 Activity1 最初加载时,我使用日期/时间函数为最终将保存在 SQLite 中的记录创建一个唯一的编号。 我在其他表格中经常使用这个数字。 它成为所拍摄图片的文件名、生成的 PDF 报告、某些验证规则、可能发送的电子邮件等的一部分。 这个数字是记录中非常重要的一部分。 就像上面一样,如果用户在活动中向前导航,一切都很棒;但是,当用户必须向后导航并最终重新加载 Activity1 时,此唯一编号将被覆盖,并且记录不再具有与图片文件和可能已创建的其他工件相同的唯一标识符。 它可能会设置此级联故障。 就像上面一样,我可以用 if/then 语句解决这个问题,但是一旦我在一个地方修复它,我就会发现它被用于另一种导致崩溃的方法。 似乎应该有一种更好的方法来生成一个随机或唯一的数字,然后保护它,直到你真正完成它。 有什么建议吗?
对于没有失去兴趣的人:几个月前,我刚开始学习java/android。 我以前对java一无所知,也没有接受过正规的编码教育。 我学到的一切都是观看 youtube 教程并在这里寻找特定问题的解决方案的结果(顺便说一下,你们太棒了)。 现在我知道的更多了,我意识到我的应用程序完全是一团糟,基本上只是用口香糖和胶带固定在一起 - 以至于我正在认真考虑从头开始,从一开始就以更清晰的愿景重建整个事情。 例如,我在整个应用程序中有大量显示项目编号的 textView 元素,但我没有一致的命名约定来确定我在搜索资源 ID 时谈论的十七种不同布局中的哪一种。 有没有好的资源可以为变量、文本字段、数据库字段等定义一个标准的命名约定,当你有很多变量、文本字段、数据库字段等时,或者每个人都只是自己编造的? 您遵循哪些命名约定?
哇...多么巨大的问题!你知道,图像胜于雄辩:)
无论如何。。。你所描述的不是一个很大的问题,只是一个架构误解。让我解释一下。
你专注于如果用户遵循"正确"的道路,一切都很好。但如果他倒退,一些信息就会丢失/删除。因此,您所要做的就是以全局方式保存信息。假设一个单例或数据管理器(类似的东西)可以从应用中的任何位置访问。