我的问题是否相当简单,我有这段代码
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;
我的问题是为什么这段代码无效,我该如何解决呢?
(关于这段代码的另一个有趣的注意事项是,我也试图在排序的末尾添加一个限制语句,我已经阅读过了,但是我没有这样做)
答案 0 :(得分:1)
如果我正确阅读the SQLite documentation, date()
需要%Y-%m-%d
形式的值。你的不是。
如果您使用的是两位数的分钟和秒值,则应该在没有任何功能的情况下进行排序。
(上面是原始问题,而不是更新)
此外,您正在查询ContentProvider
。不要求ContentProvider
提供排序。如果这是你自己的ContentProvider
,你需要检查它是否正在将sort子句传递给SQLite或者你的后备存储是什么。
答案 1 :(得分:0)
我终于找到了这个问题的答案。事实证明我的代码是正确的,但由于某种原因,我仍在处理我的ContentProvider.query()被调用两次。一次使用正确的参数并再次使用不正确的参数。(即:sortOrder == null)。
另请注意,您不能按数字顺序对数字字符串进行排序,因为sql会对int和字符串进行不同的排序