如何根据时间字符串对游标进行排序

时间:2014-10-26 17:58:53

标签: android sorting android-cursor

我的问题是否相当简单,我有这段代码

Cursor mCursor = this.getContentResolver().query(
            PlayerContentProviderDB.CONTENT_URI, fulldataColumns, null, null,
            Players.SCORE +" ASC");

这段代码,从我看过的所有东西,应该是基于Players.SCORE按升序排序光标,但事实并非如此。

作为参考,Players.SCORE将始终是格式为
的字符串 mm:ss:msmsms(读取分钟:秒:毫秒)。

此处还有我的ContentProvider中的查询方法的代码

public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    checkColumns(projection);
    queryBuilder.setTables(PlayerContract.Players.PLAYERS_TABLE_NAME);
    int uriType = sURIMatcher.match(uri);
    switch (uriType) {
    case ALL_SCORES:
    break;
    case SCORE_ID:
    queryBuilder.appendWhere(PlayerContract.Players.ID + "="
    + uri.getLastPathSegment());
    break;
    default:
    throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    SQLiteDatabase db = this.dbHelper.getReadableDatabase(); 
    Cursor cursor = queryBuilder.query(db, projection, selection,
    selectionArgs, null, null, sortOrder);
    // Notify potential listeners
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;

我的问题是为什么这段代码无效,我该如何解决呢?

(关于这段代码的另一个有趣的注意事项是,我也试图在排序的末尾添加一个限制语句,我已经阅读过了,但是我没有这样做)

2 个答案:

答案 0 :(得分:1)

如果我正确阅读the SQLite documentationdate()需要%Y-%m-%d形式的值。你的不是。

如果您使用的是两位数的分钟和秒值,则应该在没有任何功能的情况下进行排序。

(上面是原始问题,而不是更新)

此外,您正在查询ContentProvider。不要求ContentProvider提供排序。如果这是你自己的ContentProvider,你需要检查它是否正在将sort子句传递给SQLite或者你的后备存储是什么。

答案 1 :(得分:0)

我终于找到了这个问题的答案。事实证明我的代码是正确的,但由于某种原因,我仍在处理我的ContentProvider.query()被调用两次。一次使用正确的参数并再次使用不正确的参数。(即:sortOrder == null)。

另请注意,您不能按数字顺序对数字字符串进行排序,因为sql会对int和字符串进行不同的排序