我创建了两个内容提供程序,它们分别在同一SQLite数据库的两个不同表上工作。它们共享一个SQLiteOpenHelper
实例,如Ali Serghini的帖子所描述。每个内容提供程序都在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?
ContentProvider
呢?这就是Uri
中路径的作用,允许您区分不同的表或类似的内容。 - CommonsWareSyncAdapter
,而且我听说只有当提供程序是单独的提供程序时,其数据才能被同步。如果我错了,请纠正我。我很乐意阅读关于这个主题的任何文档。 - JJDSyncAdapter
。如果你所说的限制存在,我会感到有些惊讶,但我不知道这种限制是否存在。抱歉! - CommonsWare