16

同じSQLiteデータベースの2つの異なるテーブルで動作する2つのコンテンツプロバイダーを作成しました。それらは、 AliSerghiniの投稿で説明されているように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を出力することは可能ですか?

4

1 に答える 1

31

android:authoritiesニーズは、コンテンツプロバイダーごとに一意である必要があります。ドキュメントはここ でドキュメントから引用されています

content:スキームは、データをコンテンツプロバイダーに属するものとして識別し、機関(com.example.project.healthcareprovider)は特定のプロバイダーを識別します。したがって、権限は一意である必要があります。

于 2012-08-15T21:14:38.830 に答える