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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

c5324531-b69a-46f1-be87-295d5e23806b

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

事实证明,新建的另外一个project文件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                                                         // + 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 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java之Java开发工具

    Java之Java开发工具

    2021年7月21日
  • linux内核编程接口小结(一)

    linux内核编程接口小结(一)1、下面两幅图描述了linux内核编程接口函数

    2022年10月8日
  • C语言回文字符串

    C语言回文字符串“回文串”是一个正读和反读都一样的字符串,字符串由数字和小写字母组成,比如“level”或者“abcdcba”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。输入:包含多个测试实例,每一行对应一个字符串,串长最多100字母。输出:对每个字符串,输出它是第几个,如第一个输出为”case1:”;如果一个字符串是回文串,则输出”yes”,否则输出”no”,在yes/no之前用一个空格…

    2022年6月6日
  • TranslateMessage和DispatchMessage作用[通俗易懂]

    TranslateMessage和DispatchMessage作用[通俗易懂]PostMessage是将消息放入到窗体的消息队列中,窗体过程需要等待一段时间,以便从队列中取出了消息之后,才处理消息SendMessage不将消息放入消息队列,而只是把直接让窗体过程处理这个消息,所以消息一般能立刻响应。TranslateMessage函数是将消息转化成某一个,或更多的消息,比如,当消息循环接收一个WM_KEYDOWN消息时,如果用户按下了字母键,那么Translat

    2022年9月4日
  • 关于libsvm的PCA和 网格寻优「建议收藏」

    关于libsvm的PCA和 网格寻优「建议收藏」这篇博客写的很乱,只是先大致记录一下,后期行得通再慢慢补充。之前稍微整理了libsvm的内容,但是还有很多没搞懂,最近因为论文思路卡住了,所以又反过来弄libsvm因为看人家的论文,偏应用的方面,流程都非常完整,特征提取以后,一般有降维,有参数寻优,所以就很想实现这些功能,因为对比实验真的一点也写不下去了,头大…而且svm的工具箱非常的成熟了,除了常用的libsvm工具包,还有Libsvm-FarutoUltimate的工具包,这是一个基于libsvm的工具箱,增加了许多实用的功能:降维、参数寻优、可

    2022年7月21日
  • python语言一般用于什么_PYthon

    python语言一般用于什么_PYthon1.概述Python由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。Python是用来编写应用程序的高级编程语言;C语言是可以用来编写操作系

    2022年8月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号