运行 时,数据库数据未在移动设备中完全显示

database data not fully shown in mobile when run

这将是一篇很长的文章 post 但请务必阅读到最后并提供帮助。谢谢!

在我之前的 post 的延续中,[ 当我 运行 我的应用程序在我的 phone 和模拟器上都运行良好时,尽管存在编码错误.

但是,我现在面临新的问题,我想澄清一下原因。

请注意,我正在使用 DB Browser for SQLite & Android Studio (3.2.1)。我的 phone 是 Samsung S7 Edge+,我使用的模拟器是 Pixel 2 XL API 28 (Android 9, API 28).

  1. 第一个问题是我已经将新数据添加到我的数据库中,但是当我 运行 它在我的 phone 上时它没有反映出来。参见附件以参考添加的新数据 "database - knowledge.db" 数据库 = 。我还确保通过单击 "Write Changes" 选项卡更新数据。之后,要将数据库导入 Android Studio,我必须创建一个数据库资产文件夹并将我的 Knowledge.db 文件存储在其中。我已经这样做了。但是,当我 运行 我的应用程序在我的 phone 上时,当我向下滚动时它不显示更新的数据,请参阅附件 实际 phone 。但是,当我 运行 它在模拟器上时,更新的数据显示在 phone 模拟器

。新数据是标题为 "IIDS" "FIDS" 和 "GMID" 的数据。注意两个 phone 的截图,实际的 phone 截图停在 "Passenger Terminal" 并且进一步向下滚动时没有显示新数据,但是在 phone 模拟器上,新数据是显示。

最初,我认为这可能是大小问题,所以我相应地最小化了文本大小,但问题仍然存在。我想不出其他可能的原因。

  1. 其次,我知道我已经通过单击 "Write Changes" 在 DB Browser 更新了数据库,因为当我再次打开它时,新数据和命名发生了变化。但是当我将它导入 Android Studio 时,它并没有完全更新。见附件和圆圈供参考。差异

因此,有谁知道可能导致此问题的原因以及我该如何解决它?任何帮助是极大的赞赏!

最初的问题是由于数据库已经存在,因此资产文件夹 is/was 中的副本未完成。

删除数据库(删除应用程序的数据或卸载应用程序)将导致数据库从资产文件夹中复制。

但是,您随后遇到了版本号问题。我相信这是因为应用程序已更改为使用数据库版本 2(实际上从 SQLite 的角度来看 user_version)。因此,由于版本不是 1(我怀疑如果它是 1,则没有进行版本检查,因此为什么甚至没有版本(从评论来看就是这种情况))然后尝试检查数据库的版本导致空指针异常,因为没有设置 user_version(可能是错误)。

基本上,如果您(在开发应用程序时)重新引入从资产文件夹复制的已更改数据库,您不想将数据库版本从 1 更改。或者,在将数据库复制到资产文件夹之前,您需要使用数据库中的 PRAGMA user_version=?(其中?是版本号)设置适当的版本,使用您使用的任何工具。

增加数据库版本(android 明智)的唯一原因是当您想要 onUpgrade 方法到 运行。

  • 注意假设已重新检查版本号。

  • 如果您已经发布了应用程序,那么将更改后的数据库作为资产推出可能会复杂得多。