现在正在网上搜索,但无法找到解决方法。
我的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 以上的方式完成游戏时,它就会获得排名的顶部。
以下是更好地了解我的问题的屏幕截图:
有谁知道如何解决这个问题?
答案 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
感谢所有人。