2012-05-14 47 views
9

Làm cách nào để xác định truy vấn GROUP BY cho Trình tải trang của tôi?GROUP BY with CursorLoader

Hai nhà xây dựng cho một CursorLoader tôi thấy mất hoặc là một đơn Context hoặc một Context, Uri, projection, selection, selectionArgssortOrder.

Nhưng không groupBy.

(Tôi đang sử dụng các gói hỗ trợ cho một thiết bị Android 2.3)

Trả lời

24

Không thực sự ...

Bạn có thể xác định một URI cụ thể để GROUP cụ thể của bạn BY khoản.

Ví dụ, nếu bạn có một bảng mPersonTable, có thể được phân nhóm theo giới tính, bạn có thể xác định các URI sau:

PERSON 
PERSON/# 
PERSON/GENDER 

Khi truy vấn, chuyển đổi giữa các truy vấn của bạn, do đó bạn có thể thêm nhóm của bạn bằng cách tham số:

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; 
    } 
} 

trong thực tế, bạn có thể vượt qua bất kỳ loại thông số để truy vấn của bạn

Obs .: Dùng UriMatcher để phù hợp với uri với thực hiện truy vấn của bạn.

+1

Đây thực sự là một công việc xung quanh tuyệt vời, dù cho nó đòi hỏi các nhà cung cấp nội dung để hỗ trợ nó! Cảm ơn! – dbm

+0

Yea, tất nhiên rồi! Không có gì. – JPMagalhaes

+0

@JPMagalhaes: Xin hãy giúp tôi. Tôi đang làm điều tương tự nhưng không nhận được làm thế nào để có được thực hiện đó. Bạn có thể vui lòng đặt thêm một số mã về cách thay đổi nó không. –

2

Rõ ràng (và điều này là một chút lúng túng) dòng đầu tiên trong documentation nêu rõ rằng CursorLoader truy vấn ContentResolver để lấy Cursor . Trong khi ContentResolver không phơi bày bất kỳ phương tiện nào với GROUP BY, do đó, không cách nào CursorLoader cũng có thể hiển thị chức năng như vậy.

Vì vậy, câu trả lời rõ ràng cho câu hỏi của chính tôi là: Bạn không thể!

6

Bạn có thể thêm Đoàn tự do với lựa chọn tham số

new CursorLoader(context,URI, 
         projection, 
           selection+") GROUP BY (coloum_name", 
         null,null); 
+3

Tôi đánh dấu điều này là hữu ích vì nó có vẻ là câu trả lời duy nhất hoạt động với các nhà cung cấp nội dung hiện tại (bạn không thể thêm một uri cho nhóm) Nhưng có một chút đáng sợ khi nó hoạt động. –