У меня есть пользовательский ContentProvider, который я использую для хранилища, фиксирует полученный из GPS в базу данных SQLite. Этот класс переопределяет методы ContentProvider (удалите, вставьте, запросите...), но заметьте, что я также включал метод для запросов последней фиксации.
public class FixesContentProvider extends ContentProvider {
@Override
public int delete(...) { ... }
...
@Override
public Cursor query(...) { ... }
public Cursor getLastFix(Uri uri) { ... }
}
Довольно легко запросить данные из других услуг или операций путем вызова getContentResolver()
.
ContentResolver cR = getContentResolver();
Cursor fixes = cR.query(CONTENT_URI, ...);
Но я не могу назвать свой пользовательский метод (FixesContentProvider#getLastFix
). Как я мог назвать пользовательские методы определенными в ContentProvider?
Возможно, я не понимаю, как ContentProviders/ContentResolvers работают в этом случае, но официальная документация Android, предоставленная Google, не является очень четкой в этом смысле.
Но я не могу вызвать свой собственный метод (
FixesContentProvider # getLastFix
).
Это совершенно верно. Однако в этом случае вы можете воспользоваться одним преимуществом: оба метода query
и getLastFix
возвращают объект Cursor
. Итак, я бы добавил некоторое значение к URI, который вы передаете в query
, а затем решу, что вы действительно хотите сделать: query
или getLastFix
. Например:
public Cursor query(Uri uri,...) {
if ( uri says it has to return the last fix )
return getLastFix(uri);
// otherwise, do normal operations...
return cursor;
}
Фактически, метод query
должен возвращать результат, заданный Uri
. Итак, если вам нужно получить последнее исправление, вы должны указать в URI, что вы хотите получить последнее исправление.