実績をチェックする方法があり、それを適切に機能させようとしています。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 型から文字列に変換されたミリ秒単位の現在の時刻です。特に、timeInt が topTime よりも大きくないことがわかっている場合に、この関数が true を返し続ける理由がわかりません。
また、この関数は を返しtrue
ますが、データベースをチェックしたため、その更新クエリは実行されていませんが、完了した値はまだ "no" であり、name="Beat top record" です。