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 работают в этом случае, но официальная документация Android, предоставленная Google, не является очень четкой в этом смысле.

14
задан Guido 24 July 2010 в 15:32
поделиться

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 должен возвращать результат, заданный Uri . Итак, если вам нужно получить последнее исправление, вы должны указать в URI, что вы хотите получить последнее исправление.

13
ответ дан 1 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: