如何爲我的CursorLoader定義一個GROUP BY
查詢?GROUP BY with CursorLoader
的兩個構造一個CursorLoader
我看拿一個單一的Context
或Context
,Uri
,projection
,selection
,selectionArgs
和sortOrder
。
但是沒有groupBy
。
(我使用的是Android 2.3設備的支持包)
如何爲我的CursorLoader定義一個GROUP BY
查詢?GROUP BY with CursorLoader
的兩個構造一個CursorLoader
我看拿一個單一的Context
或Context
,Uri
,projection
,selection
,selectionArgs
和sortOrder
。
但是沒有groupBy
。
(我使用的是Android 2.3設備的支持包)
不是真的...
您可以定義一個特定的URI您的具體GROUP BY子句。
舉例來說,如果你有一個表mPersonTable,可能是由性別分組,您可以定義以下的URI:
PERSON
PERSON/#
PERSON/GENDER
查詢時,您的查詢之間進行切換,因此您可以通過參數添加組:
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
String groupBy = null;
switch (mUriMatcher.match(uri)) {
case PERSON_ID:
...
break;
case PERSON_GENDER:
groupBy = GENDER_COLUMN;
case PERSON:
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(mPersonTable);
builder.setProjectionMap(mProjectionMap);
return builder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder, limit);
default:
break;
}
}
其實,你可以通過任何類型的參數來查詢
實驗值:使用UriMatcher,以配合您的查詢實現的URI。
顯然,(這是一個有點尷尬)在documentation的第一行中明確指出,CursorLoader
查詢ContentResolver
檢索Cursor
。雖然ContentResolver
沒有公開任何方式GROUP BY
,因此,CursorLoader
也無法公開此類功能。
所以我自己的問題的表面答案是:你不能!
您可以通過選擇參數
new CursorLoader(context,URI,
projection,
selection+") GROUP BY (coloum_name",
null,null);
我認爲這很有用,因爲它似乎是與現有內容提供商合作的唯一答案(不能爲該組添加uri)但它有點可怕。 –
這其實是一個很大的變通,儘管它已經要求內容提供商,以支持其加入集團!謝謝! – dbm
是的,當然!別客氣。 – JPMagalhaes
@JPMagalhaes:請幫幫我。我正在做同樣的事情,但沒有得到如何得到實現。你可以請更多的代碼來說明如何改變它。 –