I have a custom ContentProvider I use to store fixes obtained from the GPS into a SQLite database. This class overrides ContentProvider methods (delete, insert, query...), but notice I have also included a method to query the last fix.
public class FixesContentProvider extends ContentProvider {
@Override
public int delete(...) { ... }
...
@Override
public Cursor query(...) { ... }
public Cursor getLastFix(Uri uri) { ... }
}
It is pretty easy to query data from other services or activities by calling getContentResolver()
.
ContentResolver cR = getContentResolver();
Cursor fixes = cR.query(CONTENT_URI, ...);
But I am not able to call my custom method (FixesContentProvider#getLastFix
). How could I call custom methods defined in a ContentProvider?
Maybe I don't understand how ContentProviders/ContentResolvers work in this case, but official Android documentation provided by Google is not very clear in this sense.
But I am not able to call my custom method (
FixesContentProvider#getLastFix
).
That's completely true. In this very case though, you can take advantage of one fact: both query
and getLastFix
methods return a Cursor
object. So, what I do would be adding some value to the URI that you pass to query
and, then decide what you want to actually do: query
or getLastFix
. For instance:
public Cursor query(Uri uri,...) {
if ( uri says it has to return the last fix )
return getLastFix(uri);
// otherwise, do normal operations...
return cursor;
}
In fact, the query
method is suppose to return a result, given a Uri
. So, if you need to retrieve the last fix, you have to specify in the URI that you want the last fix.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With