前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android组件系列—-ContentProvider内容提供商【5】

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

作者头像
全栈程序员站长
发布2022-07-06 09:27:16
2780
发布2022-07-06 09:27:16
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

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

c5324531-b69a-46f1-be87-295d5e23806b
c5324531-b69a-46f1-be87-295d5e23806b

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

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

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

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

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

【特别注意】

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

详细表如今:

1、清单文件里:

代码语言:javascript
复制
<provider
    android:name=".内容提供者的类名" 
    android:authorities="包名.内容提供者的类名" >
</provider>

如:

代码语言:javascript
复制
        <provider
            android:name=".PersonContentProvider"
            android:authorities="com.example.contentprovidertest01.PersonContentProvider" >
        </provider>

2、ContentProvider类中的UriMatcher中的uri:

代码语言:javascript
复制
 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()方法里面的代码:

代码语言:javascript
复制
 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()方法为例)

代码语言:javascript
复制
 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 }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117398.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档