方法始终返回true

时间:2012-06-01 02:31:02

标签: android string boolean

我有一个检查成就的方法,我正在尝试让它正常工作。它需要一个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”。

1 个答案:

答案 0 :(得分:3)

您的方法返回true,根据条件正确。让我详细解释一下你。

正如你所说的那样,你的timeString变量包含当前的毫秒数,这是自1900年1月1日以来的一个很长的毫秒值。你在数据库中的时间值是旧时间值而不是当前时间(我假设你,因为你没有'给出它的价值)。因此,假设您的最高时间是昨天(即2012年5月31日)。现在,当您将此值与今天的当前时间进行比较时,您的方法将返回true,这本身就是正确的。

为了检查虚假值我想建议你存储一些未来时间,例如大于今天的日期(即2012年6月1日)并执行方法,它肯定会返回false值。