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, что вы хотите последнее исправление.