【发布时间】:2012-06-01 02:31:02
【问题描述】:
我有一个检查成就的方法,我正试图让它正常工作。它需要一个 String 并将其转换为 long ,然后检查数据库中的 String 值(转换为 long )
代码如下:
public boolean checkAchievements(String timeString) {
long timeInt = Long.parseLong(timeString);
boolean newAchievement = false;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT millis FROM records ORDER BY CAST(millis as SIGNED) DESC", null);
cursor.moveToFirst();
long topTime = Long.parseLong(cursor.getString(0));
cursor.close();
if (timeInt > topTime) {
db.rawQuery("update achievements set completed='yes' where name='Beat top record'", null);
newAchievement = true;
}
db.close();
return newAchievement;
}
timeString 是从日历中抓取并从 long 转换为字符串的当前时间(以毫秒为单位)。我不知道为什么这个函数会一直返回 true,尤其是当我知道 timeInt 不大于 topTime 的事实时。
此外,即使此函数返回 true,该更新查询甚至没有运行,因为我检查了数据库并且完成的值仍然是“no”,其中 name="Beat top record"。
【问题讨论】:
-
当你说你“知道 timeInt 不大于 topTime”是因为你检查了调试器中的值?关于题外话:您可能会考虑在 SELECT 查询中添加“LIMIT 1”。
-
很好,我的 UPDATE 查询也不起作用,即使函数返回 true....
-
您确定设备/模拟器正在运行您认为的代码吗?
-
@TedHopp 提出了一个有效的问题,但您忽略了该问题(关于“了解事实”),并提出了有关添加到 SQL 的建议。您可以编辑您的问题以提供该信息。
-
让我澄清一下我之前的评论:您发布的代码不能返回
true,除非timeInt > topTime。因此,您的假设(不是“事实”)timeInt <= topTime一定是错误的(或者,正如@Dave 所建议的,您没有运行您发布的代码)。我建议您使用调试器测试您的假设。数据库未更新(即使执行了update查询)可能是由于其他因素;这不能证明if的主体没有执行。