Подтвердить что ты не робот

Как обращаться к нескольким провайдерам контента?

Я создал два поставщика контента, которые работают на двух разных таблицах одной и той же базы данных SQLite. Они делят один экземпляр SQLiteOpenHelper как описанный в сообщении Али Сергини. Каждый поставщик контента зарегистрирован в AndroidManifest.xml следующим образом.

<provider
    android:name=".contentprovider.PostsContentProvider"
    android:authorities="com.example.myapp.provider"
    android:exported="false"
    android:multiprocess="true" >
</provider>
<provider
    android:name=".contentprovider.CommentsContentProvider"
    android:authorities="com.example.myapp.provider"
    android:exported="false"
    android:multiprocess="true" >
</provider>

Каждый поставщик контента определяет необходимые URI содержимого и предоставляет UriMatcher.

public class PostsProvider extends BaseContentProvider {

    private static final UriMatcher sUriMatcher = buildUriMatcher();
    private static final int POSTS = 100;
    private static final int POST_ID = 101;

    private static UriMatcher buildUriMatcher() {
        final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
        final String authority = CustomContract.CONTENT_AUTHORITY;
        matcher.addURI(authority, DatabaseProperties.TABLE_NAME_POSTS, POSTS);
        matcher.addURI(authority, DatabaseProperties.TABLE_NAME_POSTS + "/#", POST_ID);
        return matcher;
    }

...

public class CommentsProvider extends BaseContentProvider {

    protected static final UriMatcher sUriMatcher = buildUriMatcher();
    protected static final int COMMENTS = 200;
    protected static final int COMMENT_ID = 201;

    private static UriMatcher buildUriMatcher() {
        final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
        final String authority = CustomContract.CONTENT_AUTHORITY;
        matcher.addURI(authority, DatabaseProperties.TABLE_NAME_COMMENTS, COMMENTS);
        matcher.addURI(authority, DatabaseProperties.TABLE_NAME_COMMENTS + "/#", COMMENT_ID);
        return matcher;
    }

Когда я вызываю средство распознавания контента для вставки сообщений, целевое значение PostsContentProvider. Однако, когда я пытаюсь вставить комментарии, распознаватель контента не относится к CommentsContentProvider, как ожидалось, но вызывает PostsContentProvider. Результатом является следующее исключение, которое я вбрасываю в PostsContentProvider.

UnsupportedOperationException: Unknown URI: content://com.example.myapp.provider/comments

Можно ли выводить все доступные URI контента, зарегистрированные в настоящее время у поставщика контента?

4b9b3361

Ответ 1

android:authorities должен быть уникальным для каждого поставщика контента. Документация здесь цитируется из документа

Контент: схема идентифицирует данные как принадлежащие контенту провайдера и авторитета (com.example.project.healthcareprovider) идентифицирует конкретного поставщика. Следовательно, авторитет должен быть уникальный.