2012-03-27 3 views
12

콘텐츠 공급자가 반환하는 행 수를 제한하는 방법이 있습니까? 찾았지만, solution, 나에게 도움이되지 못했습니다. 모든 행이 계속 리턴됩니다.콘텐츠 공급자를 사용하여 제한 절을 추가하는 방법

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

아이디어 만 있습니다. 그러나 마지막 절로 limit 절을 넣으려고 할 수 있습니다. 마찬가지로 activity.managedQuery (playlistUri, null, null, null, "limit 3")? – Renard

답변

33

나는이 문제를했고 나는 마침내 그것을 알아 냈어, 또는 오히려 나를 위해 일한 whay을 가지고 때까지 내 머리를 중단해야했다. 다음을 시도하십시오.

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

마지막 매개 변수는 sortOrder입니다. 정렬 순서를 제공하고 LIMIT를 추가했습니다. 공간을 적절하게 제공했는지 확인하십시오. 나는 형성되고 있던 조회를 검사해야하고 이것이 작동하는 것처럼 보였다.

+6

"ASC LIMIT 2"가 작동하지 않습니까? –

+0

마지막 2 행이 오름차순으로 필요하면 작동하지 않습니다. 그것은 처음 두 행을 가져올 것입니다 – ozmank

+0

더 나은 접근법을 보려면 [여기] (http://stackoverflow.com/a/24055457/313113) – bitek

2

콘텐츠 공급자는 일반적으로 한도 매개 변수에주의를 기울여야합니다. 불행하게도, 보편적으로 구현되지 않습니다. 예를 들어

, SearchManager 쿼리를 처리하기 위해 콘텐츠 공급자를 작성할 때 :

이 만 정렬 절에 제한을 접착의 추악한 옵션을 다시 떨어질 수 구현되지
String limit = uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT); 

.

2

아쉽게도 ContentResolver는 제한 인수가 있는지 질의 할 수 없습니다. ContentProvider 내에서 MySQLQueryBuilder는 추가 한도 매개 변수를 추가하여 쿼리 할 수 ​​있습니다.

아젠다 다음에 ContentProvider 내에 추가 URI 규칙을 추가 할 수 있습니다. 쿼리 방법 활동에서

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

쿼리 컨텐트 프로에서 그런

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

.

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")); 
관련 문제