【问题标题】:Method always returns true方法总是返回 true
【发布时间】: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 的主体没有执行。

标签: android string boolean


【解决方案1】:

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

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

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

【讨论】:

  • 您假设的事实并不详细。没有迹象表明timeString 指的是任何特定值,我们不知道数据库中的时间戳是什么,并且您没有解决update 不起作用的事实。所以我想如果你假设的所有事情都是真的,那就是“回归正确,这是正确的”,但我们无法知道。
  • 同意你的观点,让 Scarhand 将 topTime 的值放在问题中@KenWhite
  • @KenWhite - OP 确实发布了“timeString 是从日历中抓取并从 long 转换为字符串的当前时间(以毫秒为单位)”。这个答案似乎是最有可能的解释,但只有 OP 可以肯定地说。顺便说一句,路西法很好。
  • @KenWhite,请阅读OP的评论,我的假设是正确的,很明显今天你记录了一条带有时间戳的记录,当你明天将这条记录与当前时间戳进行比较时,时间戳的值会很大.通常我们从不存储未来的时间戳,除非是许可的情况。
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 2012-05-15
  • 2012-11-19
  • 2013-08-06
  • 2017-05-10
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多