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


    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 }

  • 相关阅读:
    开发工程师的职场人生路
    10 ASP.NET Performance and Scalability Secrets(转载推荐)
    手机号码归属地查询接口大全
    参数的秘密“纠结”的压缩比
    爱情本来并不复杂,来来去去不过三个字
    假如苹果、微软、谷歌造汽车 他们的区别是什么
    tomcat修改jsessionid在cookie中的名称
    virtualBox 中 linux 系统 相关配置
    htpasswd用法
    linux 防火墙
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4682148.html
Copyright © 2020-2023  润新知