Search code examples
androidandroid-cursorloader

Limit the query in CursorLoader


I am trying to query data from sqlite db through CursorLoader. When i go through the documentation in android developer website, i can't find the limit query.

CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

How can i implement limit in CursorLoader?

Thanks in Advance


Solution

  • The hackish way:

    String sortOrder = "ROWID LIMIT 5"
    

    which will result in ORDER BY ROWID LIMIT 5. ROWID would sort by the implicit row ids that SQLite keeps - very close to what happens when you don't specify a sort oder at all. Not that this is abusing the fact that the order parameter does not check if the supplied value is just a valid order type. Kind of a buffer overflow attack.

    A better way would be to define Uri parameters.

    // query code
    Uri queryUri = Uri.parse("content://what/ever/items");
    queryUri = queryUri.buildUpon().appendQueryParameter("limit", "5").build();
    
    // in ContentProvider
    String limit = queryUri.getQueryParameter("limit");
    

    Both approaches will only work if the ContentProvider is compatible with above attempts to limit. There is actually no well-defined way to limit or select certain data from a ContentProvider. Each ContentProvider comes with it's own contract so above will not work with every provider.