Android: вызов пользовательских методов в ContentProvider
У меня есть собственный 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 в этом случае, но официальная документация от Google, предоставленная Google, не очень понятна в этом чувство.
Ответы
Ответ 1
Но я не могу вызвать свой собственный метод (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
должен возвращать результат, заданный a Uri
. Итак, если вам нужно восстановить последнее исправление, вы должны указать в URI, что вы хотите последнее исправление.
Ответ 2
Начиная с уровня API 11, существует метод ContentResolver.call(Uri, String, String, Bundle), который обеспечивает дополнительную гибкость.