iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Kotlin ContentProvider使用方法介绍
  • 634
分享到

Kotlin ContentProvider使用方法介绍

2024-04-02 19:04:59 634人浏览 独家记忆
摘要

目录1、注册ContentProvider2、内容URI内容URI的标准格式通配符3、创建自己的ContentProvider4、访问其他程序中的数据1、注册ContentProvi

1、注册ContentProvider

右击com.example.myapplication包->New->Other->Content Provider。会弹出窗口

点击finish,完成创建ContentProvider类,这时你可以在注册代码中看到

<provider
            Android:name=".MyContentProvider"
            android:authorities="com.example.myapplication.provider"
            android:enabled="true"
            android:exported="true"></provider>

注册ContentProvider时通常指定属性

属性描述
name指定该ContentProvider的实现类的类名
authorities指定该ContentProvider对应的URI
enabled指定该ContentProvider是否可用
exported指定该ContentProvider是否允许其他应用调用

2、内容URI

ContentResolver中的增删改查方法都不接收表名参数,而是使用一个Uri参数代替,这个参数被称为内容URI。

内容URI的标准格式

content://<authorities>/<path>

(1)以路径结尾:表示期望访问该表地所有数据

(2)以id结尾:表示期望访问该表拥有相应id的数据

<authorities>:authorities是用于对不同的应用程序做区分的,一般会采用包名的方式命名,比如包名为com.example.myapplication,那么<authorities>为com.example.myapplication.provider。

<path>:path是用于对同一应用程序的不同表做区分的,比如com.example.myapplication.provider/table1。

通配符

*表示匹配任意长度的任意字符

#表示匹配任意长度的数字

一个能够匹配任意表的内容URI格式

content://com.example.myapplication.provider/*

一个能够匹配table表中任意一行数据的内容URI格式

content://com.example.myapplication.provider/table1/#

把内容URI字符串解析成Uri对象

val uri=Uri.parse("content://com.example.myapplication.provider/table1")

3、创建自己的ContentProvider

重写ContentProvider类的6个抽象方法

  • onCreate()。初始化ContentProvider的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true表示ContentProvider初始化成功,返回false则表示失败。
  • query()。从ContentProvider中查询数据。uri参数用于确认查询哪张表,projection参数用于确定查询哪些列,selection和selectionArgs参数用于约束查询哪些行,sortOrder参数用于对结果进行排序,查询的结果存放在Cursor对象中返回。
  • insert()。向ContentProvider中添加一条数据,uri参数用于确定要添加的表,待添加的数据保存在values参数中。添加完成后,返回一个用于表示这条新纪录的URI。
  • updata()。更新ContentProvider中已有的数据,uri参数用于确定更新哪一张表中的数据,新数据保存在values参数中,selection和selectionArgs参数用于约束更新哪些行,受影响的行数将作为返回值返回。
  • delete()。从ContentProvider中删除数据。uri参数用于确定删除哪一张表中的数据,selection和selectionArgs参数用于约束删除哪些行,被删除的行数将作为返回值返回。
  • getType()。根据传入的内容URI返回相应的MIME类型。

getType方法中,一个内容URI所对应的MIME字符串主要由3部分组成,Android对这3部分做了如下格式规定

  • 必须以vnd开头
  • 如果内容URI以路径结尾,则后接android.cursor.dir/。
  • 如果内容URI以id结尾,则后接android.cursor.item/。
  • 最后接上vnd.<acthority>.<path>。

例子:content://com.example.myapplication.provider/table1

MIME类型:vnd.android.cursor.dir/vnd.com.example.myapplication.provider.table1

    override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
    }
    override fun getType(uri: Uri): String? {
        
    }
    override fun insert(uri: Uri, values: ContentValues?): Uri? {
    }
    override fun onCreate(): Boolean {
    }
    override fun query(uri: Uri, projection: Array<String>?, selection: String?,
                              selectionArgs: Array<String>?, sortOrder: String?): Cursor? {
    }
    override fun update(uri: Uri, values: ContentValues?, selection: String?,
                               selectionArgs: Array<String>?): Int {
    }

(2)利用UriMatcher这个类实现匹配内容URI的功能,来判断出调用方期望访问的时哪张表中的数据。

UriMatcher的addURI()方法,接收三个参数,可以分别把authority、path和一个自定义代码传进去。这样,当调用UriMatcher的match()方法时,把一个Uri对象传入,就会返回一个与这个Uri对象匹配的一个自定义代码。

class MyContentProvider : ContentProvider() {
    private val table1Dir=0
    private val table1Item=1
    private val table2Dir=2
    private val table2Item=3
    private val uriMatcher=UriMatcher(UriMatcher.NO_MATCH)
    init {
        uriMatcher.addURI("com.example.app.provider","table1",table1Dir)
        uriMatcher.addURI("com.example.app.provider","table1/#",table1Item)
        uriMatcher.addURI("com.example.app.provider","table2",table2Dir)
        uriMatcher.addURI("com.example.app.provider","table2Item",table2Item)
    }
   ...
    override fun query(uri: Uri, projection: Array<String>?, selection: String?,
                              selectionArgs: Array<String>?, sortOrder: String?): Cursor? 
  {
        when(uriMatcher.match(uri)){
            table1Item->{
                //查询table1表中的所有数据
            }
            table1Item->{
                //查询table1表中的单条数据
            }
            table2Dir->{
                //查询table2表中的所有数据
            }
            table2Item->{
                //查询table2表中的单条数据
            }
        }
    }
...
}

4、访问其他程序中的数据

1、ContentResolver的基本用法

要访问ContentProvider中共享的数据,就要调用Context的getContentResolver()方法获取ContentResolver的实例,然后对数据进行增减改查的操作。

(1)查询

val cursor=contentResolver.query(uri,projection,selection,selectionArgs,sortOrder)
        if (cursor != null) {
            while (cursor.moveToNext()){
                val column1=cursor.getString(cursor.getColumnIndex("column1"))
                val column2=cursor.getString(cursor.getColumnIndex("colum2"))
            }
            cursor.close()
        }

(2)增加

       val values= contentValuesOf("column1" to "text","column2" to 1)
        contentResolver.insert(uri,values)

(3)修改

        val values= contentValuesOf("column1" to "")
        contentResolver.update(uri, values,"column1 = ? and column2 = ?", arrayOf("text","1"))

(4)删除

contentResolver.delete(uri,"column2 = ?", arrayOf("1"))

到此这篇关于Kotlin ContentProvider使用方法介绍的文章就介绍到这了,更多相关kotlin ContentProvider内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Kotlin ContentProvider使用方法介绍

本文链接: https://www.lsjlt.com/news/166987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Kotlin ContentProvider使用方法介绍
    目录1、注册ContentProvider2、内容URI内容URI的标准格式通配符3、创建自己的ContentProvider4、访问其他程序中的数据1、注册ContentProvi...
    99+
    2024-04-02
  • Kotlin ContentProvider使用方法详解
    目录ContentProvider提供者contentResolver获取短信数据ContentObserver监控短信的到来小结android的四大组件,已经介绍了两个,这一节介绍...
    99+
    2022-12-08
    Kotlin ContentProvider Kotlin ContentProvider的使用
  • Kotlin方法与Lambda表达式实践使用介绍
    目录前言一、Kotlin的方法1、方法声明2、方法参数3、方法作用域二、Lambda表达式1、Lambda表达式的特点2、Lambda实践总结前言 经过前面对 Kotlin 的介绍,...
    99+
    2024-04-02
  • Kotlin泛型的使用介绍
    1.泛型类、泛型函数 1)泛型类可以接收任意类型。Package<T>(t: T) 2)泛型类中定义的泛型参数<T>,通常用T(Type)表示,(t: T) ...
    99+
    2024-04-02
  • Kotlin扩展方法超详细介绍
    目录前言一、扩展方法1.扩展方法的原型2.扩展方法的使用二、Kotlin扩展方法实现原理三、泛型扩展方法四、扩展属性五、为伴生对象添加扩展六、Kotlin 中常用的扩展七、案例前言 ...
    99+
    2024-04-02
  • Kotlin匿名函数使用介绍
    目录1.函数的声明2.函数参数3.Unit函数4.匿名函数5.匿名函数的参数6.lambda表达式7.定义参数8.匿名函数9.函数的引用10.函数类型作为返回类型1.函数的声明 ko...
    99+
    2024-04-02
  • Kotlin语言使用WebView示例介绍
    目录1、WebView类提供的常用方法2、WebView的简单用法实现浏览网页1、启用JavaScript的支持2、目标的网页仍然在当前WebView中显示3、将网址传入3、结合We...
    99+
    2024-04-02
  • Kotlin语言使用BroadcastReceiver示例介绍
    目录一、动态注册和静态注册二、自定义广播1.方法解析2.发送标准广播一、动态注册和静态注册 动态注册:在代码中注册 动态注册能监听到大部分的系统广播和自定义的广播(都为隐式广播) 步...
    99+
    2024-04-02
  • Kotlin集合ListSetMap使用介绍详解
    1.在Kotlin中可以通过以下方式创建ArrayList、LinkedList、HashSet、HashMap等。 val arrayList = ArrayList<...
    99+
    2024-04-02
  • JavaScriptreduce方法使用方法介绍
    目录1. reduce方法的使用2. reduce数组的使用场景2.1 扁平化数组2.2 数组去重2.3 计算数组最大/最小值2.4 数组求和2.5 计算数组中元素的出现次数3. 操...
    99+
    2022-11-13
    JavaScript reduce JS reduce
  • Kotlin 基础语法详细介绍
    Kotlin 基础语法详细介绍基础语法定义包名包名的定义应当在源文件的头部package my.demoimport java.util.*// ......
    99+
    2023-05-31
    kotlin 基础语法
  • String.format()方法的使用介绍
    String.format() 方法中的 % 符号用作占位符,用于将值插入字符串中。它用于使用特定值(例如整数、浮点数或字符串)格式化字符串。% 符号后面跟着一个字母,指定要插入的值的类型,例如 %d 表示整数,%s 表示字符串。要插入的...
    99+
    2023-09-07
    java 开发语言 spring servlet
  • mysqldump的使用方法介绍
    这篇文章主要介绍了mysqldump的使用方法介绍,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1、说明mysqldump在库被删除的情况下,无法直接从文件恢复,需要手动新建同名库,才能从文件恢复数据。2、语法shell...
    99+
    2023-06-15
  • AndroidLeakCanary的使用方法介绍
    目录1.LeakCanary 如何自动初始化2.LeakCanary如何检测内存泄漏2.1LeakCanary初始化时做了什么2.2LeakCanary如何触发检测2.3LeakCa...
    99+
    2024-04-02
  • Kotlin协程的启动方式介绍
    目录1.GlobalScope.launch2.runBlocking 启动协程3.async启动协程启动协程的基本方式 1.GlobalScope.launch 代码示例: fun...
    99+
    2024-04-02
  • ReactHooks使用方法全方位介绍
    目录hooks介绍useState(保存组件状态)useEffect()useCallback(记忆函数)useMemo(记忆组件)useRef(保存引用值)useReducerus...
    99+
    2023-03-19
    React Hooks React Hooks方法
  • pythonos.path模块使用方法介绍
    os.path模块是os模块根据系统类型从另一个模块导入的,并非由os模块实现 1、os.path.abspath(相对路径)-----返回对应路径的绝对路径 os.path.abs...
    99+
    2024-04-02
  • fastjson 使用方法详细介绍
    Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。遵循http://json.org标准,为其官方网站收录的参考实现之一。功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、M...
    99+
    2023-05-30
    fastjson 使用
  • pythonos模块使用方法介绍
    os(operating system)模块是python中操作文件系统的模块,它是Python程序与操作系统进行交互的接口 os模块常用方法 1、os.chdir(path)修改当...
    99+
    2024-04-02
  • Androidshape标签使用方法介绍
    目录shape标签基本使用语法Shape标签生成GradientDrawable对象GradientDrawable获取shape子标签属性GradientDrawable进行sha...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作