我的数据库表中有一个 INTEGER
列,并已将 1476355625598
的值保存到其中(通过更新现有行)。
当我立即通过查询检查该值时,我得到了返回的相同、正确的 1476355625598
值。
但是,当我的 IntentService 稍后检索该值时,它返回的是 -1113124226
的值。
我检查了一下,-1113124226
的值与您调用 (int)1476355625598
的值相同。
我已将调试输出添加到修改此列的所有代码行,并且可以确认我没有其他数据库操作正在更新该值。
所以似乎有什么东西正在将我的 long 转换为 int ...任何想法如何/为什么会发生这种情况?
注意 - 我保存的值是时间戳(毫秒格式),这比以字符串格式保存更可取。
更新
因为我的数据库可以通过内容提供者访问,所以我在我的 MyApplication 类中添加了一个内容观察器。它不会报告相关表的任何其他更新。
更新 #2
问题现已解决。看评论...
最佳答案
在我有时间写这篇文章之前,OP 发现了他的错误,但我仍然会发布它以关闭它。如果他愿意,OP 可以添加他自己的(没有难过的感觉;))(这将防止其他人稍后发送垃圾邮件以获得一些代表点......)
如异常(exception),问题出在从游标中检索值。即使值存储到一个 INTEGER 中,此列可以容纳一个 long
所以在游标上,我们需要使用 getLong(int)
或 getLong(String)
方法。如果不是,JAVA 将截断该值作为异常(exception)。
在问题中, setter/getter 不存在,但 OP 帖子和另一个帖子的答案:https://stackoverflow.com/a/40008872/1617737
这显示了他如何复制光标。这是他对 NUMERIC SqliteType 使用 getInt
而不是 getLong
的情况。
关于Android SQLite long 值被检索/转换为 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019370/