-1

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

ihetimeString是从日历中抓取并从 long 转换为字符串的当前时间(以毫秒为单位)。我不知道为什么这个函数会一直返回 true,尤其是当我知道 timeInt 不大于 topTime 的事实时。

此外,即使这个函数正在返回true,该更新查询甚至没有运行,因为我检查了数据库并且完成的值仍然是“no”,其中 name="Beat top record"。

4

1 回答 1

3

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

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

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

于 2012-06-01T03:02:45.873 回答