Я создал два поставщика контента, которые работают на двух разных таблицах одной и той же базы данных 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 контента, зарегистрированные в настоящее время у поставщика контента?