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

来源:互联网 发布:带函数冒泡排序c语言 编辑:程序博客网 时间:2024/05/22 13:46

2、运行query()方法,查询所有记录(目前一共两条记录)。后台输出效果如下:

c5324531-b69a-46f1-be87-295d5e23806b

经测试,其他方法也都是可以执行的。

事实证明,新建的另外一个工程文件ContentResolverTest中,在里面运行单元测试,也是可以执行的(单元测试的代码不变,实现的CRUD功能也一模一样),也就是说,能够对ContentProviderTest01中的SQLite进行CRUD操作。例如,运行query()方法,后台输出如下:

4180318a-9f6a-42ea-95de-cdc3548c7bd2

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

【特别注意】

需要特别注意的是,代码中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                                                         // + path11         }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 = Uri11                 .parse("content://com.example.contentprovidertest01.PersonContentProvider/person");12         contentResolver.insert(uri, values);13     }
0 0