0

ハイスコ​​ア テーブル用の SQLite db があります。現在、新しいスコアがハイスコアになるかどうかの確認と、ハイスコア テーブルの並べ替えに問題があります。

ゲームが終了すると、Results.java が呼び出されます。

結果.java

total_score = dh.calculateTotalScore(score, percentage);
low_score = dh.check(score, percentage, total_score);
if(total_score > low_score) {
    dh.delete(10);
    dh.insert(score, percentage, total_score);
} else {
    dh.insert(score, percentage, 9999999);
}
dh.sort();

で呼び出されるすべてのメソッドResults.javaは から来ていDatabaseHelper.javaます。

DatabaseHelper.java

public void sort() {
    db.rawQuery("SELECT * FROM " + DB_TABLE + " ORDER BY " + TOTAL_SCORE, null);
}

public long calculateTotalScore(long score, int percentage) {
    long i;
    return i = (percentage * 1000) + score;
}

public long check(long score, int percentage, long sum) {
    Cursor c = db.rawQuery("SELECT " + TOTAL_SCORE + " FROM " + DB_TABLE, null);
    long count = c.getCount();
    long low_score;
    if(count == 10) {
        c.moveToLast();
        low_score = c.getInt(c.getColumnIndex(TOTAL_SCORE));
        return low_score;
    } else {
        return count;
    }
}

public long insert(long score, int percentage, long total_score) {
    ContentValues values = new ContentValues();
    values.put(SCORE, score);
    values.put(PERCENTAGE, percentage);
    values.put(TOTAL_SCORE, total_score);

    return db.insert(DB_TABLE, null, values);
}

public void delete(int row) { 
    db.delete(DB_TABLE, RANK + "=" + row, null);
}

TOTAL_SCORE の出力は次のように表示されます。

  • 1
  • 2
  • 40851
  • 1
  • 2
  • 40804
  • 60811
  • 60811
  • 50816

私が望むのは、出力が番号順にあることです。このような:

  • 1
  • 1
  • 2
  • 2
  • 40804
  • 40851
  • 50816
  • 60811
  • 60811

上記の順序は、(私が思うに) データベースに挿入された順序です。プログラムの実行時にエラーは発生せず、プログラムはクラッシュしません。必要に応じて、追加のコードを提供できます。

4

1 に答える 1

4

SELECT何も変更しません。あなたのsort機能は効果がありません。(このrawQuery関数はソートされたレコードのリストを返しますが、無視します。)

ORDER BYスコアを表示するために使用されるクエリに句を入れる必要があります。

于 2013-01-08T17:36:58.537 に答える