ContentProvider的用法

【Android-ContentProvider】contentProvider基础用法详解及相关代码 本文是针对ContentProvider基础用法的模拟: ContentProvider主要是用于将数据库变为provider提供给第三方使用的控件 本文将创建一个数据库,一个第三方使用者来演示如何使用该组件。 具体步骤: 写一个内容提供者,继承自contentprovider 在mainfest中注册,并开启权限 校验URI的工具类和指定相关规则 以查询为例,写query方法 模拟一个第三方应... 阅读详情

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样可以对外共享数据,但数据的访问方式会因数据存储的方式而不同,如:采用xml文件对外共享数据,需要进行xml解析来读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

当应用需要通过ContentProvider对外共享数据时,第一步需要继承ContentProvider并重写下面方法:

public classPersonContentProvider extends ContentProvider{

   public boolean onCreate()

   public Uri insert(Uri uri, ContentValuesvalues)

   public int delete(Uri uri, String selection,String[] selectionArgs)

   public int update(Uri uri, ContentValuesvalues, String selection, String[] selectionArgs)

   public Cursor query(Uri uri, String[]projection, String selection, String[] selectionArgs, String sortOrder)

   public String getType(Uri uri)}

第二步需要在AndroidManifest.xml使用<provider>对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider , ContentProvider 采用了authorities(主机名/域名)对它进行唯一标识,你可以把 ContentProvider看作是一个网站(想想,网站也是提供数据者),authorities 就是他的域名:

<manifest ....>

    <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">

        <providerandroid:name=".PersonContentProvider"android:authorities="cn.scl.providers.personprovider"/>

    </application>

</manifest>

注意:一旦应用继承了ContentProvider类,后面我们就会把这个应用称为ContentProvider(内容提供者)。

Uri介绍

Uri代表了要操作的数据,Uri主要包含了两部分信息:1》需要操作的ContentProvider ,2》对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:

计算机生成了可选文字: content://cn.}」}1tcast.provider.personprovider/person/10}!‘广scheme主机名或authority路径ID

ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://

主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

要操作person表中id为10的记录,可以构建这样的路径:/person/10

要操作person表中id为10的记录的name字段, person/10/name

要操作person表中的所有记录,可以构建这样的路径:/person

要操作xxx表中的记录,可以构建这样的路径:/xxx

当然要操作的数据不一定来自数据库,也可以是文件、xml或网络等其他存储方式,如下:

要操作xml文件中person节点下的name节点,可以构建这样的路径:/person/name

如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:

Uriuri = Uri.parse("content://cn.scl.provider.personprovider/person")

UriMatcher类使用介绍

因为Uri代表了要操作的数据,所以我们经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。

UriMatcher类用于匹配Uri,它的用法如下:

首先第一步把你需要匹配Uri路径全部给注册上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码

UriMatcher  sMatcher = newUriMatcher(UriMatcher.NO_MATCH);

//如果match()方法匹配content://cn.scl.provider.personprovider/person路径,返回匹配码为1

sMatcher.addURI(“cn.scl.provider.personprovider”,“person”, 1);//添加需要匹配uri,如果匹配就会返回匹配码

//如果match()方法匹配content://cn.scl.provider.personprovider/person/230路径,返回匹配码为2

sMatcher.addURI(“cn.scl.provider.personprovider”,“person/#”, 2);//#号为通配符

switch(sMatcher.match(Uri.parse("content://cn.scl.provider.personprovider/person/10"))) {

   case 1

    break;

   case 2

    break;

   default://不匹配

    break;

}

注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://cn.scl.provider.personprovider/person路径,返回的匹配码为1

ContentUris类使用介绍

ContentUris类用于获取Uri路径后面的ID部分,它有两个比较实用的方法:

withAppendedId(uri, id)用于为路径加上ID部分:

Uriuri = Uri.parse("content://cn.scl.provider.personprovider/person")

Uri resultUri =ContentUris.withAppendedId(uri, 10);

//生成后的Uri为:content://cn.scl.provider.personprovider/person/10

parseId(uri)方法用于从路径中获取ID部分:

Uriuri = Uri.parse("content://cn.scl.provider.personprovider/person/10")

long personid = ContentUris.parseId(uri);//获取的结果为:1

使用ContentProvider共享数据

ContentProvider类主要方法的作用:

public boolean onCreate()

该方法在ContentProvider创建后就会被调用, Android开机后, ContentProvider在其它应用第一次访问它时才会被创建。

public Uri insert(Uri uri, ContentValues values)

该方法用于供外部应用往ContentProvider添加数据。

public int delete(Uri uri, String selection, String[]selectionArgs)

该方法用于供外部应用从ContentProvider删除数据。

public int update(Uri uri, ContentValues values,String selection, String[] selectionArgs)

该方法用于供外部应用更新ContentProvider中的数据。

public Cursor query(Uri uri, String[] projection,String selection, String[] selectionArgs, String sortOrder)

该方法用于供外部应用从ContentProvider中获取数据。

public String getType(Uri uri)

该方法用于返回当前Url所代表数据的MIME类型。如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头,例如:要得到所有person记录的Uri为content://cn.scl.provider.personprovider/person,那么返回的MIME类型字符串应该为:“vnd.android.cursor.dir/person”。如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头,例如:得到id为10的person记录,Uri为content://cn.scl.provider.personprovider/person/10,那么返回的MIME类型字符串应该为:“vnd.android.cursor.item/person”。

使用ContentResolver操作ContentProvider中的数据

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver 类提供了与ContentProvider类相同签名的四个方法:

public Uri insert(Uri uri, ContentValues values)

该方法用于往ContentProvider添加数据。

public int delete(Uri uri, String selection, String[]selectionArgs)

该方法用于从ContentProvider删除数据。

public int update(Uri uri, ContentValues values,String selection, String[] selectionArgs)

该方法用于更新ContentProvider中的数据。

public Cursor query(Uri uri, String[] projection,String selection, String[] selectionArgs, String sortOrder)

该方法用于从ContentProvider中获取数据。

这些方法的第一个参数为Uri,代表要操作的ContentProvider和对其中的什么数据进行操作,假设给定的是:Uri.parse(“content://cn.scl.providers.personprovider/person/10”),那么将会对主机名为cn.scl.providers.personprovider的ContentProvider进行操作,操作的数据为person表中id为10的记录。

使用ContentResolver操作ContentProvider中的数据

使用ContentResolver对ContentProvider中的数据进行添加、删除、修改和查询操作:

ContentResolverresolver =  getContentResolver();

Uri uri =Uri.parse("content://cn.scl.provider.personprovider/person");

//添加一条记录

ContentValuesvalues = new ContentValues();

values.put("name","scl");

values.put("age",25);

resolver.insert(uri,values);       

//获取person表中所有记录

Cursor cursor =resolver.query(uri, null, null, null, "personid desc");

while(cursor.moveToNext()){

Log.i("ContentTest","personid="+ cursor.getInt(0)+ ",name="+cursor.getString(1));

}

//把id为1的记录的name字段值更改新为liming

ContentValuesupdateValues = new ContentValues();

updateValues.put("name","liming");

Uri updateIdUri =ContentUris.withAppendedId(uri, 2);

resolver.update(updateIdUri,updateValues, null, null);

//删除id为2的记录

Uri deleteIdUri =ContentUris.withAppendedId(uri, 2);

resolver.delete(deleteIdUri, null, null);

当ContentProvider中的数据发生变化时可以向其用户发出通知

如果ContentProvider的访问者需要得知ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,例子如下:

public classPersonContentProvider extends ContentProvider {

publicUri insert(Uri uri, ContentValues values) {

db.insert("person","personid", values);

getContext().getContentResolver().notifyChange(uri,null);

}

}

如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法:

getContentResolver().registerContentObserver(Uri.parse("content://cn.scl.providers.personprovider/person"),

                true, new PersonObserver(newHandler()));

public classPersonObserver extends ContentObserver{

publicPersonObserver(Handler handler) {

super(handler);

     }

publicvoid onChange(boolean selfChange) {

    //此处可以进行相应的业务处理

}

}

 

深度学习部署工程师--8(docker+TensorRT部署到推理+yolo人体检测)下 本文介绍了YOLOv5模型通过TensorRT加速部署的流程。首先需要检查磁盘空间,确保有30GB可用。文章对比了不同推理方式的性能:int8量化+TensorRT可达200FPS,纯TensorRT为166FPS,CUDA为147FPS,CPU为93FPS。重点讲解了将YOLOv5模型导出为ONNX格式的详细步骤,包括修改Detect类的forward方法以移除decode运算,使用git patch批量修改代码,安装必要的依赖库,以及通过onnx-graphsurgeon工具修改ONNX图结构。最终目标 阅读详情

相关推荐

修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案

1.问题描述:开机电脑显示“无法登陆到你的账户:通常可以通过从你的账户注销,然后重新登陆来解决问题,如果不立即注销,你创建的任何文件或进行的任何更改都将会丢失。” 2.问题原因:想要修改cmd中的用户名(红色部分),修改了注册表,重启时出现问题。 3.问题解决: win+R输入cmd,确定进入注册表界面,将下面的地址复制进地址栏(你也可以自己按目录查找),双击ProfileImage...

qq_33835957的博客 7万+

【Android】ContentProvider

一、ContentProvider的概念  ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。Android提供了一些主要数据类型的Contentprovider,比如音频、视频、图片和私人通讯录等。可在andro...

weixin_30787531的博客 295

从公式到实践:用SPSS解锁香农多样性指数的生态洞察

本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。

weixin_30832143的博客 465

ContentProvider的使用

1、ContentProvider概念 content provider类是android提供的四大组件之一,用于跨进程的内容分享。 通过content provider提供的机制,统一对外的数据接口,可以方便安全的分享或获取其他应用的数据。 一般如果没有暴露数据给第三方的需求,其实很少会用到这个类。 2、ContentProvider类 使用contentprovider同其他组件一样,需继承ContentProvider并实现相关方法即可。 如下 上面的方法中包含了常用的增删改查等,我们根据需要完成相

wh义华的专栏 4237

从零理解域随机化:通过Isaac Lab的events.py掌握Sim-to-Real关键技术

本文深入解析域随机化技术如何通过Isaac Lab的events.py实现Sim-to-Real迁移,提升机器人策略在真实世界的鲁棒性。从刚体属性到环境条件的系统级随机化,详细介绍了工程实践中的关键参数配置与调试技巧,帮助开发者有效缩小仿真与现实的差距。

weixin_29062613的博客 260

xenomai内核解析--嵌入式实时linux概述

Linux系统作为一个GPOS(通用操作系统)发展至今已经非常成熟可靠了,并且由于遵循GPL协议,开放所有系统源代码,非常易于裁剪。更重要的是,与其他开源的GPOS或RTOS相比,Linux系统支持多种处理器、开发板,提供多种软件开发工具,同时Linux系统对网络和图形界面的支持非常出色。显然,选择Linux操作系统在产品的开发周期和成本控制方面都有巨大优势。 虽然Linux系统功能强大、实用性强...

wsg1100 3699

跨进程共享数据——ContentProvider

跨进程共享数据——ContentProvider Android数据持久化技术,包括文件存储、SharedPreferences存储以及数据库存储,使用这些持久化技术所保存的数据只能在当前应用程序中访问。虽然文件存储和SharedPreferences存储中提供了MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种操作模式,用于供给其他应用程序访问当前应用的数据,但 这两种模式在Android 4.2版本中都已被废弃了。因为Android官方已经不再推荐使用这种方式来实现跨

xingyu19911016的博客 6202

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 858

ContentProvider的介绍和使用

ContentProvider的介绍和使用

weixin_45809829的博客 2212

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 921

基于SVD矩阵分解的用户购物篮预测分析实战

基于SVD矩阵分解的用户购物篮预测分析实战

360

《第一行代码》Android学习笔记(7)内容提供器 —— ContentProvider

目录 1. 运行时权限 1.1 权限机制 2.2 运行时申请权限 2. 访问其他程序中的数据 2.1 ContentResolver 基本用法 2. URI:统一资源标识符 Uniform Resource Identifier 2.2 读取系统联系人 3. 创建自己的内容提供器 # 保证隐私数据不会泄露:UriMatcher 3.1 跨程序数据共享:provider 作为外部...

Cou流氓也要有文化的博客 1900

ROS从入门到精通2-7:Gazebo仿真之动态生成障碍物

动态生成障碍物在机器人导航、碰撞避障算法测试、多机协同等领域应用广泛,可以帮助开发人员快速测试,本文介绍该技术并提供基于ROS Gazebo的实现

FRIGIDWINTER的博客 4896

Contentprovider的基本用法

在前两年的开发中我们是很少看到ContentProvider的情况,但随着社会的进步数据化的东西越来越多,进而需要各种数据访问也就越来越多。android提供了ContentProvider来应对不同应用间的数据访问。下面我们就对ContentProvider进行一个简单的用法介绍;在数据存储端 继承ContentPovider; AndroidManifest.xml中配置; 在ContentPr

CreazyTomato的博客 1069

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

自定义ContentProvider用法

自定义ContentProvider用法 一、   简介 ContentProvider是android的四大基本组件之一,作用是为应用程序提供数据。ContentProvider封装数据,通过ContentResolver接口向应用程序提供数据。只有当需要向多个应用程序提供数据时,才建议你使用CotentProvider。如果你的数据只需要供当前应用程序使用,你可以直接使用SQLiteDat

wanziwu的博客 761

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ContentProvider简单用法

作为四大组件之一,ContentProvider不但可以在程序内部数据交流,还可以在不同应用程序之间进行数据交流。往往这方面知识会结合sqlite知识来讲解,本篇也不例外。 一.首先简单的介绍Uri:        Uri由以下几部分组成:                                    content://com.example.contentprovider/boo

diy_os的专栏 1950

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ContentProvider的详细用法

一、ContentProvider的概念   ContentProvider:为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。Android提供了一些主要数据类型的Contentprovider,比如音频、视频、图片和私人通讯录等。可在and

miao_8zhong的博客 1575

Android 中ContentProvider的用法及用ContentProvider访问联系人

  一。概念:  * ContentProvider,内容提供者,android四组件之一,可以跨程序访问数据;  * 若用ContentProvider实现不同应用程序之间数据的共享,必须借助ContentResolver(内容解析器)类,  * 1.获得ContentResolver对象:Context.getContentResolver();  * 2.通过ContentResolver...

FightFightFight的博客 1746

ContentProvider的用法浅析

一、使用ContentProvider共享数据ContentProvider在Android中的作用是对外提供数据,除了可以为所在应用提供 数据外,还可以共享数据给其他应用,这是Android中解决应用之间数据共享的 机制。通过ContentProvider我们可以对数据进行增删改查的操作。当应用需要 通过ContentProvider对外共享数据时,具体作法如下: 1、 继承系统Cont

no pains,no gains! 504

Android中ContentProvider的意义及用法

ContentProvider提供了标准的接口,供APP跟其他APP共享数据。ContentProvider提供了一种基于使用content://模式的简单URI寻址模型来发布和使用数据的接口。它允许将应用层跟底层数据层分离,通过抽象底层数据源使应用程序不必依赖于某个数据源。

艟粼的专栏 1634

从实例理解ContentProvider用法

原理部分1-2 代码实现部分3-5 原理部分开始-------------------------------------------------------------------------------------------------------------------------------------------- 1.ContentProvider是一个抽象类,不能直接使用,需...

Jessicababy1994的博客 725

ContentProvider的用法与理解

ContentProvider是用来分享数据的一个标准接口,所以在使用上它分为3部分 中间部分就是一个注册,在manifest中加provider,由主机名和路径组陈,表示全球唯一的一个继承了ContentProvider并实现了抽象方法的类 ContentProvider部分就是向外部提供数据的部分,它提供了一些标准的方法让外部操作应用程序的数据 需要使用别的应用程序的使用者,get

qingzhouzhen的专栏 1042

Android中ContentProvider和Uri用法

一、使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORL

ruanjianxiong的专栏 8172

ContentProvider用法

1、通过Context的getContentRsolver()获取ContentResolver类的实例。 2、ContentResolver中接收的不是表明而是内容URI 3、解析内容URI获得Uri对象 4、返回值为Cursor对象,通过游标遍历Cursor取出数据 5、关闭Cursor 自定义ContentProvider   1、新建ContentProvider类,重写...

weixin_30362233的博客 134
上一篇: android apk的反编译
下一篇: android 从internet获取html,图片
com360
博客等级 码龄16年 225粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值