2012-03-27 33 views
12

Có cách nào giới hạn số hàng được trả về từ nhà cung cấp nội dung không? Tôi thấy điều này solution, tuy nhiên, nó không làm việc cho tôi. Tất cả các hàng vẫn đang được trả lại.Cách thêm mệnh đề giới hạn sử dụng nhà cung cấp nội dung

Uri uri = Playlists.createIdUri(playlistId); //generates URI 
uri = uri.buildUpon().appendQueryParameter("limit", "3").build();  
Cursor cursor = activity.managedQuery(playlistUri, null, null, null, null); 
+0

Chỉ là một ý tưởng. Nhưng bạn có thể thử đặt mệnh đề giới hạn làm tham số cuối cùng. Giống như activity.managedQuery (playlistUri, null, null, null, "limit 3")? – Renard

Trả lời

33

Tôi đã gặp phải vấn đề này và phải phá vỡ đầu cho đến khi cuối cùng tôi tìm ra, hoặc thay vào đó có một tiếng làm việc cho tôi. Hãy thử như sau

Cursor cursor = activity.managedQuery(playlistUri, null, null, null, " ASC "+" LIMIT 2"); 

Tham số cuối cùng dành cho sắp xếpOrder. Tôi đã cung cấp thứ tự sắp xếp và cũng nối thêm LIMIT vào nó. Hãy chắc chắn rằng bạn cung cấp cho các không gian đúng cách. Tôi đã phải kiểm tra các truy vấn đã được hình thành và điều này dường như làm việc.

+6

"ASC LIMIT 2" có hoạt động không? –

+0

Sẽ không hoạt động nếu cần 2 hàng cuối cùng trong trật tự asc. nó sẽ tìm nạp hai hàng đầu tiên – ozmank

+0

Để có cách tiếp cận tốt hơn, hãy xem [tại đây] (http://stackoverflow.com/a/24055457/313113) – bitek

2

Nhà cung cấp nội dung nên theo nguyên tắc chung chú ý đến thông số giới hạn. Thật không may, nó không được triển khai toàn cầu.

Ví dụ, khi viết một nhà cung cấp nội dung để xử lý các truy vấn SearchManager:

String limit = uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT); 

Trường hợp không được thực hiện, bạn chỉ có thể rơi trở lại vào tùy chọn xấu xí của dán một giới hạn về mệnh đề phân loại.

2

Thật không may, ContentResolver không thể truy vấn có đối số giới hạn. Bên trong ContentProvider của bạn, MySQLQueryBuilder của bạn có thể truy vấn thêm tham số giới hạn bổ sung.

Theo chương trình làm việc, chúng tôi có thể thêm quy tắc URI bổ sung bên trong ContentProvider.

static final int ELEMENTS_LIMIT = 5; 
public static final UriMatcher uriMatcher; 

static { 
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
........ 
uriMatcher.addURI(AUTHORITY, "elements/limit/#", ELEMENTS_LIMIT); 
} 

Sau đó, trong phương pháp truy vấn của bạn

String limit = null; //default.... 
    switch(uriMatcher.match(uri)){ 
     ....... 
       case ELEMENTS_LIMIT: 
        limit = uri.getPathSegments().get(2); 
       break; 
     ...... 

      } 

return mySQLBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder, limit); 

Truy vấn ContentProvider từ hoạt động.

uri = Uri.parse("content://" + ContentProvider.AUTHORITY + "/elements/limit/" + 1); 

//In My case I want to sort and get the greatest value in an X column. So having the column sorted and limiting to 1 works. 
    Cursor query = resolver.query(uri, 
         new String[]{YOUR_COLUMNS}, 
         null, 
         null, 
         (X_COLUMN + " desc")); 
Các vấn đề liên quan