登陆 | 注册 设为首页 | 加入收藏 | 联系我们
太和养老网
热词老年艺术  助老机构  养老系统  

中心区域北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 香港 澳门 台湾 全国城市养老院目录 全国县市养老院汇总目录 太和AI作品展 太和养老艺术网AI作品展示

ContentProvider详解-飞

 

2023/7/6 17:08:24 ('互联网')

概述

ContentProvider虽说我们平时用的并不多,但是作为安卓四大组件之一,其地位不容忽视。ContentProvider的作用是为不同的应用之间数据共享,提供统一的接口,我们知道安卓系统中应用内部的数据是对外隔离的,要想让其它应用能使用自己的数据(例如通讯录)这个时候就用到了ContentProvider。

ContentProvider如何共享数据(《与妻书》最出名的一句话是什么?《与妻书》最出名的一句话是:吾今与汝无言矣!吾居九泉之下,遥闻汝哭声,当哭相和也。吾平日不信有鬼,今则又望其真有。今人又言心电感应有道,吾亦望其言是实,则吾之死,吾灵尚依依旁汝也,汝不必以无侣悲!)

ContentProvider通过uri来标识其它应用要访问的数据,通过ContentResolver的增、删、改、查方法实现对共享数据的操作。还可以通过注册ContentObserver来监听数据是否发生了变化来对应的刷新页面。下面分别说说每个类的作用。

ContentProvider讲解

ContentProvider是一个抽象类,如果我们需要开发自己的内容提供者我们就需要继承这个类并复写其方法,需要实现的主要方法如下:
public boolean onCreate()
在创建ContentProvider时使用
public Cursor query()
用于查询指定uri的数据返回一个Cursor
public Uri insert()
用于向指定uri的ContentProvider中添加数据
public int delete()
用于删除指定uri的数据
public int update()
用户更新指定uri的数据
public String getType()
用于返回指定的Uri中的数据MIME类型
数据访问的方法insert,delete和update可能被多个线程同时调用,此时必须是线程安全的

uri讲解

其它应用可以通过ContentResolver来访问ContentProvider提供的数据,而ContentResolver通过uri来定位自己要访问的数据,所以我们要先了解uri。URI(Universal Resource Identifier)统一资源定位符,如果您使用过安卓的隐式启动就会发现,在隐式启动的过程中我们也是通过uri来定位我们需要打开的Activity并且可以在uri中传递参数。URI的格式如下:
[scheme:][//host:port][path][?query]
单单看这个可能我们并不知道是什么意思,下面来举个栗子就一目了然了
URI:http://www.baidu.com:8080/wenku/jiatiao.html?id=123456&name=jack
scheme:根据格式我们很容易看出来scheme为http
host:www.baidu.com
port:就是主机名后面path前面的部分为8080
path:在port后面?的前面为wenku/jiatiao.html
query:?之后的都是query部分为 id=123456$$name=jack
uri的各个部分在安卓中都是可以通过代码获取的,下面我们就以上面这个uri为例来说下获取各个部分的方法:
getScheme() :获取Uri中的scheme字符串部分,在这里是http
getHost():获取Authority中的Host字符串,即 www.baidu.com
getPost():获取Authority中的Port字符串,即 8080
getPath():获取Uri中path部分,即 wenku/jiatiao.html
getQuery():获取Uri中的query部分,即 id=15&name=du
到这里关于uri的部分就讲解完了,下面让我们通过一个自定义ContentProvider实例来说下自定义ContentProvider的流程以及怎么使用ContentResolver操作ContentProverb的数据

自定义ContentProvider实例讲解

我们先创建一个项目叫contentprovider,在该项目中我们自定义一个StudentContentProvider的类用来共享该应用的数据,自定义StudentContentProvider的代码如下:

public class StudentContentProvider extends ContentProvider {    //这里的AUTHORITY就是我们在AndroidManifest.xml中配置的authorities    private static final String AUTHORITY = "com.jrmf360.studentProvider";    //匹配成功后的匹配码    private static final int MATCH_CODE = 100;    private static UriMatcher uriMatcher;    private StudentDao studentDao;    //数据改变后指定通知的Uri    private static final Uri NOTIFY_URI = Uri.parse("content://" + AUTHORITY + "/student");    static {        //匹配不成功返回NO_MATCH(-1)        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);        //添加我们需要匹配的uri        uriMatcher.addURI(AUTHORITY,"student", MATCH_CODE);    }    @Override    public boolean onCreate() {        studentDao = StudentDao.getInstance(getContext());        return false;    }    @Nullable    @Override    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,                        @Nullable String[] selectionArgs, @Nullable String sortOrder) {        int match = uriMatcher.match(uri);        if (match == MATCH_CODE){            Cursor cursor = studentDao.queryStudent();            return cursor;        }        return null;    }    @Nullable    @Override    public String getType(@NonNull Uri uri) {        return null;    }    @Nullable    @Override    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {        if (uriMatcher.match(uri) == MATCH_CODE){            studentDao.insertStudent(values);            notifyChange();        }        return null;    }    @Override    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {        if (uriMatcher.match(uri) == MATCH_CODE){            int delCount = studentDao.deleteStudent();            notifyChange();            return delCount;        }        return 0;    }    @Override    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection,               



扫码加微信详细咨询太和智慧养老产品和平台服务!

 

 





版权声明:

---------------------------------------------------------------


所有信息来源于互联网,本文的版权归原作者所有,不代表本网观点和立场。

本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 81480447@qq.com 举报,一经查实,本站将立刻删除。



扫码加微信详细咨询太和智慧养老产品和平台服务!

 

养老资讯
助老机构介绍
评论
已有 0 条评论

最新评论

推荐养老院

您希望养老院位于
  • 不限
  • 东城
  • 西城
  • 崇文
  • 宣武
  • 朝阳
  • 丰台
  • 石景山
  • 海淀
  • 门头沟
  • 房山
  • 通州
  • 顺义
  • 昌平
  • 大兴
  • 怀柔
  • 平谷
  • 延庆
  • 密云
您希望的价格范围
  • 不限
  • 500以下
  • 500-1000
  • 1000-2000
  • 2000-3000
  • 3000-5000
  • 5000以上
老人的情况是
  • 不限
  • 自理
  • 半自理
  • 全护理
  • 特护

姓名

年龄

电话

全国城市养老院



关于我们 | 联系方式 | 网站地图 | 友情链接

Copyright 2010-2022 京ICP备18035644号-3 北京太和 版权所有