Android SQLite长值被检索/转换为int值

时间:2016-10-13 11:10:03

标签: android sqlite

我的数据库表中有一个INTEGER列,并将1476355625598的值保存到它(通过更新现有行)。

当我通过查询立即检查值时,我得到了1476355625598返回的相同,正确的值。

但是,当我的IntentService稍后检索该值时,它会返回-1113124226的值。

我已完成支票,-1113124226的价值与您调用(int)1476355625598的价值相同。

我已将修改输出添加到修改此列的所有代码行,并且可以确认我没有其他正在更新该值的数据库操作。

所以看起来似乎有些事情让我长期陷入困境......任何想法如何/为何会发生这种情况?

注意 - 我保存的值是时间戳(毫秒格式),最好以字符串格式保存。

更新

由于我的数据库可通过内容提供商访问,因此我已将内容观察者添加到MyApplication类中。它不会报告相关表格的任何其他更新。

更新#2

问题现在解决了。见评论......

2 个答案:

答案 0 :(得分:1)

在我有时间写这篇文章之前,OP发现了他的错误,但我仍然会将其发布以关闭它。 OP可以添加自己的(如果他想要的话)(没有感觉;))(这会阻止其他人以后发送垃圾邮件以获得一些代表点......)

除外,问题来自于从光标中检索值。即使值存储在INTEGER中,此列也可以在光标上保留long,我们需要使用getLong(int)getLong(String)方法获取值。如果没有,JAVA会将该值截断为例外。

在这个问题中,getter不存在,但OP发布并在另一个POST上回答:https://stackoverflow.com/a/40008872/1617737

这显示了他如何复制光标。这是因为他使用getInt而不是getLong来获取NUMERIC SqliteType。

答案 1 :(得分:0)

使用此

long id = cursor.getLong(colIndex);

代替

long id = cursor.getint(colIndex);