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

时间:2018-10-26 04:09:45

标签: android sqlite android-studio db-browser-sqlite

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

上一篇文章的继续,[Android Studio - Database file loaded in the wrong encoding: 'UTF-8'我的应用程序在手机和仿真器上都运行正常,尽管存在编码错误。

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

请稍等,我正在将DB Browser用于SQLite和Android Studio(3.2.1)。我的手机是Samsung S7 Edge +,而我使用的仿真器是Pixel 2 XL API 28(Android 9,API 28)。

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

phone emulator。新数据是标题为“ IIDS”,“ FIDS”和“ GMID”的数据。注意这两个电话的屏幕截图,实际的电话屏幕截图在“旅客终端”处停止了,进一步向下滚动时,没有显示新数据,但是在电话模拟器上,显示了新数据。

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

  1. 第二,我知道我已经通过单击“写入更改”在数据库浏览器中更新了数据库,因为当我再次打开它时,新数据和命名已更改。但是,当我将其导入Android Studio时,它并没有完全更新。请参阅附件和带圆圈的以供参考。差异 differences

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

1 个答案:

答案 0 :(得分:0)

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

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

但是,然后您遇到了版本号问题。我认为这是因为该应用程序已更改为使用数据库版本2(实际上是从SQLite的角度来看user_version)。因此,由于版本不是1(我怀疑是否是1,所以不进行任何版本检查,因此为什么连版本都没有(如注释所示)),则尝试检查数据库的版本,结果是空指针异常,因为没有设置user_version(可能是一个错误)。

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

为什么要运行onUpgrade方法,才是增加数据库版本(安卓系统)的唯一原因。

  • 已做出注意假设,以重新检查版本号。

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