0

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

继续我之前的帖子,[ Android Studio - 以错误编码加载的数据库文件:'UTF-8'我的应用程序在我的手机和模拟器上运行它时运行良好,尽管存在编码错误。

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

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

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

手机模拟器. 新数据是标题为“IIDS”、“FIDS”和“GMID”的数据。注意两部手机的截图,实际的手机截图停在“客运站”,向下滚动时没有显示新数据,但在手机模拟器上显示了新数据。

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

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

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

4

1 回答 1

0

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

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

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

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

您增加数据库版本(android 明智)的唯一原因是您希望该onUpgrade方法运行。

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

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

于 2018-10-26T06:42:04.807 回答