2012-03-27 18 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行が昇順で必要な場合は動作しません。それは最初の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); 

クエリの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); 
} 

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")); 
関連する問題