适用于多个数据库/ ContentProviders的ContentProvider

时间:2013-11-23 04:37:33

标签: android android-contentprovider searchview

任何人都可以告诉我如何创建一个ContentProvider,它可以查询多个数据库/ ContentProviders以获取SearchView提供的搜索建议。

1 个答案:

答案 0 :(得分:2)

使用ContentProviders,您正在使用ContentUrl查询数据,该内容看起来像这样

content://<authority>/<data_type>/<id>

权限是内容提供商名称,例如联系人或自定义联系人将是com.xxxxx.yyy。

data_type id 用于指定您需要提供的数据,如果需要,还可以指定密钥的特定值。

因此,如果要构建自定义内容提供程序,则需要解析在查询函数中作为参数获取的内容uri,并确定需要将哪些数据作为Cursor返回。对于这种情况,UriMatcher类是非常好的选择。这是一个例子

static final String URL = "content://com.mycompany.myapp/students";
static final Uri CONTENT_URI = Uri.parse(URL);

static final UriMatcher uriMatcher;
static{
  uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
  uriMatcher.addURI("com.mycompany.myapp", "students", 1);
  uriMatcher.addURI("com.mycompany.myapp", "students/#", 2);
}

然后在你的查询函数中,你会有这样的东西:

switch (uriMatcher.match(uri)) {
  case 1:
     // we are querying for all students
     // return a cursor all students e.g. "SELECT * FROM students"
     break;
  case 2:
     // we are querying for all students
     // return a cursor for the student matching the given id (the last portion of uri)
     // e.g. "SELECT * FROM students WHERE _id = n"
     break;
  default:
     throw new IllegalArgumentException("Unknown URI " + uri);
  }

我希望这可以回答你的问题,并引导你走上正确的轨道。

在这里,你可以看到一篇很好的文章,里面有关于如何使用它们的完整示例 http://www.tutorialspoint.com/android/android_content_providers.htm