正确的sqlite查询错误输出

时间:2017-03-02 14:27:40

标签: android sqlite android-sqlite

现在正在网上搜索,但无法找到解决方法。

我的Android应用程序排名显示哪个玩家有最佳时间。

我有这段代码:

         int newM = seconds + minutes * 60; //converting to seconds
         Log.e("minutes:", newM + "");
         dataHelper.insertData(pNameC.getText().toString(), newM, currentDateandTime, Category.leve);

它会插入玩家的名字,玩家完成解决游戏的时间以及当前日期。

要读取数据库并在UI上创建表,我有以下代码:

try {
        int i =1;
        String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_OUTLET + " WHERE levelofD LIKE '" + MainActivity.lvl + "' ORDER BY timeFinished ASC";
        Cursor cursor = db.rawQuery(selectQuery, null);
        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {

                // Read columns data
                String playerName = cursor.getString(cursor.getColumnIndex("playerName"));
                int timeF = Integer.parseInt(cursor.getString(cursor.getColumnIndex("timeFinished")));
                String dT = cursor.getString(cursor.getColumnIndex("dateToday"));


                // dara rows
                TableRow row = new TableRow(context);
                row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
                        TableLayout.LayoutParams.WRAP_CONTENT));

                int m, s;
                s = timeF % 60;
                m = timeF / 60;

                String[] colText = {playerName, String.format("%02d:%02d", m, s), dT};
                for (String text : colText) {
                    TextView tv = new TextView(this);
                    tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                            TableRow.LayoutParams.WRAP_CONTENT));
                    tv.setGravity(Gravity.CENTER);
                    tv.setBackgroundColor(Color.WHITE);
                    tv.setTextSize(16);
                    tv.setPadding(5, 5, 5, 5);
                    tv.setText(text);
                    row.addView(tv);
                }
                tableLayout.addView(row);
            }

        }
        db.setTransactionSuccessful();

    } catch (SQLiteException e) {
        e.printStackTrace();

    } finally {
        db.endTransaction();
        // End the transaction.
        db.close();
        // Close database
    }

它运作正常,但当玩家完全以 1:40 以上的方式完成游戏时,它就会获得排名的顶部。

以下是更好地了解我的问题的屏幕截图:

Screenshot

有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

看起来您将时间作为文本存储在表格中。这就是125(作为字符串)分钟低于61的原因。尝试将时间作为int时间戳存储在数据库中。或者int分钟数 - 我想你会更喜欢这样。 :)

答案 1 :(得分:0)

如果你想把时间存储为字符串,你可以使用ISO-timestrings,它的排列方式可以排序。

所以125分钟将成为02:05:00而61分钟将成为01:01:00。

这也可以轻松地与其他时间和日期进行计算。

大多数时间处理库都支持这种格式。在Java中,根据Java版本(小于8),您应该使用Joda-time。在Java 8中,您应该查看java.time.format.DateTimeFormatter

答案 2 :(得分:0)

非常感谢所有帮助过我的人。我终于解决了这个问题。 @Selvin是对的。我将timeFInished初始化为TEXT。所以我将查询更改为timeFinished INTEGER感谢所有人。