我有一个检查成就的方法,我正在尝试让它正常工作。它需要一个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;
}
Ihe timeString
是从日历中抓取并从长整数转换为字符串的当前时间(以毫秒为单位)。我不知道为什么这个函数继续返回true,特别是当我知道timeInt不大于topTime的事实时。
另外,即使此函数返回true
,该更新查询甚至没有运行,因为我检查了数据库,并且完成的值仍为“no”,其中name =“Beat top record”。
答案 0 :(得分:3)
您的方法返回true
,根据条件正确。让我详细解释一下你。
正如你所说的那样,你的timeString变量包含当前的毫秒数,这是自1900年1月1日以来的一个很长的毫秒值。你在数据库中的时间值是旧时间值而不是当前时间(我假设你,因为你没有'给出它的价值)。因此,假设您的最高时间是昨天(即2012年5月31日)。现在,当您将此值与今天的当前时间进行比较时,您的方法将返回true
,这本身就是正确的。
为了检查虚假值我想建议你存储一些未来时间,例如大于今天的日期(即2012年6月1日)并执行方法,它肯定会返回false
值。