您的位置:首页 > 移动开发 > Android开发

Android组件系列----ContentProvider内容提供商【5】

2015-07-28 10:45 603 查看
2、执行query()方法,查询全部记录(眼下一共两条记录)。后台输出效果例如以下:





经測试,其它方法也都是能够运行的。

事实证明,新建的另外一个project文件ContentResolverTest中。在里面执行单元測试。也是可以执行的(单元測试的代码不变,实现的CRUD功能也一模一样),也就是说,可以对ContentProviderTest01中的SQLite进行CRUD操作。

比如,执行query()方法,后台输出例如以下:





这样,我们的目的也就达到了。

【特别注意】

须要特别注意的是,代码中uri不要写错了,这些错误一旦发生。非常难被发现。

详细表如今:

1、清单文件里:

<provider
android:name=".内容提供者的类名"
android:authorities="包名.内容提供者的类名" >
</provider>


如:

<provider
android:name=".PersonContentProvider"
android:authorities="com.example.contentprovidertest01.PersonContentProvider" >
</provider>


2、ContentProvider类中的UriMatcher中的uri:




1     private static final UriMatcher URI_MATCHER = new UriMatcher(
2             UriMatcher.NO_MATCH);// 默认的规则是不匹配的
3     private static final int PERSON = 1; // 操作单行记录
4     private static final int PERSONS = 2; // 操作多行记录
5     // 往UriMatcher中加入匹配规则。

注意,这里面的url不要写错了,我就是由于写错了,半天没调试出来。哎···
6     static {
7         // 加入两个URI筛选
8         URI_MATCHER.addURI("com.example.contentprovidertest01.PersonContentProvider",
9                 "person", PERSONS);
10         // 使用通配符#,匹配随意数字
11         URI_MATCHER.addURI("com.example.contentprovidertest01.PersonContentProvider",
12                 "person/#", PERSON);
13     }





3、ContentProvider类中的getType()方法里面的代码:




1     @Override
2     public String getType(Uri uri) {
3         int flag = URI_MATCHER.match(uri);
4         switch (flag) {
5         case PERSON:
6             return "vnd.android.cursor.item/person"; // 假设是单条记录,则为vnd.android.cursor.item/
7                                                         // + path
8         case PERSONS:
9             return "vnd.android.cursor.dir/persons"; // 假设是多条记录,则为vnd.android.cursor.dir/
10                                                         // + path
11         }
12         return null;
13     }





4、ContentResolver类中的uri:(以insert()方法为例)




1     //測试方法:向数据库中加入记录。

假设之前没有数据库。则会自己主动创建
2     public void insert() {
3         // 使用内容解析者ContentResolver訪问内容提供者ContentProvider
4         ContentResolver contentResolver = getContext().getContentResolver();
5         ContentValues values = new ContentValues();
6         values.put("name", "生命贰号");
7         values.put("address", "湖北");
8         // content://authorities/person
9         // http:// 10         Uri uri = Uri
11                 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");
12         contentResolver.insert(uri, values);
13     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: