在上篇博客中我们介绍了自定义ContentProvider,但是遗漏掉了一个方法,那就是getType,自定义ContentProvider一般用不上getType方法,但我们还是一起来探究下这个方法究竟是干什么的?

我们先来看看ContentProvider中对这个类的定义:

    /*** Implement this to handle requests for the MIME type of the data at the* given URI.  The returned MIME type should start with* <code>vnd.android.cursor.item</code> for a single record,* or <code>vnd.android.cursor.dir/</code> for multiple items.* This method can be called from multiple threads, as described in* <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes* and Threads</a>.** <p>Note that there are no permissions needed for an application to* access this information; if your content provider requires read and/or* write permissions, or is not exported, all applications can still call* this method regardless of their access permissions.  This allows them* to retrieve the MIME type for a URI when dispatching intents.** @param uri the URI to query.* @return a MIME type string, or {@code null} if there is no type.*/public abstract @Nullable String getType(@NonNull Uri uri);

注释说的也算是比较清楚了,根据给定的Uri返回一个MIME类型的数据,如果是单条数据,那么我们的MIME类型应该以vnd.android.cursor.item开头,如果是多条数据,我们的MIME类型的数据应该以vnd.android.cursor.dir开头,同时,注释还很明确的告诉我们,对于没有访问该ContentProvider权限的应用依然可以调用它的getType方法。

那么我们先来看看什么是MIME,根据维基百科上的解释,MIME是多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,这话太笼统,大家可以 看看w3c上的解释http://www.w3school.com.cn/media/media_mimeref.asp,这里有详细的举例。

参考网上的信息,getType的作用应该是这样的,以指定的两种方式开头,android可以顺利识别出这是单条数据还是多条数据,比如在上篇博客中,我们的查询结果是一个Cursor,我们可以根据getType方法中传进来的Uri判断出query方法要返回的Cursor中只有一条数据还是有多条数据,这个有什么用呢?如果我们在getType方法中返回一个null或者是返回一个自定义的android不能识别的MIME类型,那么当我们在query方法中返回Cursor的时候,系统要对Cursor进行分析,进而得出结论,知道该Cursor只有一条数据还是有多条数据,但是如果我们按照Google的建议,手动的返回了相应的MIME,那么系统就不会自己去分析了,这样可以提高一丢点的系统性能。基于此,我们上篇自定义的ContentProvider中的getType方法可以这么写:

    @Overridepublic String getType(Uri uri) {int code = matcher.match(uri);switch (code) {case 1:// 查询多条数据return "vnd.android.cursor.dir/multi";case 2:case 3:// 根据id或者姓名查询一条数据return "vnd.android.cursor.item/single";}return null;}

MIME前面的一部分我们按照Google的要求来写,后面一部分就可以根据我们自己的实际需要来写。

还有一种我们可能会很少遇到的情况,我们有可能不知道ContentProvider返回给我们的是什么,这个时候我们可以先调用ContentProvider的getType,根据getType的不同返回值做相应的处理。

就这些,欢迎拍砖指正。

转载于:https://www.cnblogs.com/lenve/p/5865920.html

对ContentProvider中getType方法的一点理解相关推荐

  1. java中gettext方法_深入理解Java中方法的参数传递机制

    形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...

  2. ContentProvider中gettype() 和MIME类型的理解

    转载处:http://blog.csdn.net/fangxinglian/article/details/22981277 程序入口点 类似于win32程序里的WinMain函数,Android自然 ...

  3. 欧拉方法的一点理解(基本原理,推导公式)

    本文只是作者的一点点理解,初衷是让小白看懂数学,去理解,而不是刻板的记公式,纯手敲,希望多多关注,大佬可以指点,但别喷我. 本文的前提是常微分方程,很多地方我就不过多的讲解前提条件了,读者只要知道,一 ...

  4. convertViewsetTag方法的一点理解

    转自:http://blog.163.com/freemanls@126/blog/static/164585061201171210504864/ 前言 首先我们要知道setTag方法是干什么的,S ...

  5. 关于numpy,torch中seed()方法的一些理解

    首先举几个使用seed()函数的例子: # 生成随机数,以便固定后续随机数,方便复现代码 random.seed(args.seed) # 没有使用GPU的时候设置的固定生成的随机数 np.rando ...

  6. 关于CDO中去趋势的一点理解

    碎碎念 1.去趋势基本概念理解 维基百科给出的解释: 在随机过程, 混沌理论和时间序列分析中, 去趋势波动分析(英文:Detrended Fluctuation Analysis, DFA)是一种判断 ...

  7. 关于bottle WEB框架中签名cookie的一点理解

    首先要理解一个概念 MAC (message authenticate code) 消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具. 构造方 ...

  8. 算法中对数量级的一点理解

    前言 最近开始学习算法知识,仅记录自己对算法学习感悟,同时也是方便自己以后复习 1.为什么我们需要了解数量级 我们需要去精确描述一组数据的时候,我们通常使用具体的数据记录,但是我们去理解一组数据的时候 ...

  9. Golang中调用“方法”的简单理解

    如果声明函数的时候带有接收者,则意味着声明了一个方法,同时,这个方法会和指定的接收者的类型绑在一起. 如: func (m defaultMatcher) Search(feed *Feed, sea ...

最新文章

  1. POJ 3080 多个串最长公共子序列
  2. 如何彻底解决pip install慢的问题
  3. ecshop“发货查询”中加入收货人、收货地址、发货时间、配送方式
  4. git cherry-pick命令
  5. java安全编码指南之:锁的双重检测
  6. 解决pc端浏览器不兼容的问题
  7. 【转】Dynamics CRM 365零基础入门学习(七)Dynamics 365 DataMigrationUtility tool使用
  8. live555的安装 RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)
  9. XML-RPC技术在WP上研究(一)
  10. python字符串驻留机制_python的内存驻留机制(小数据池)
  11. 井通swtc能不能涨到2元_玉米收购价最高涨110元一吨,节后玉米能否破1.2?收购商说得有理...
  12. 如何充分利用好大数据的价值
  13. 游戏开发关卡设计(16)
  14. js中try和catch的用法
  15. Idea一键导入所有缺省的包
  16. CAD高版本转低版本怎么转?分享几种好用的转换方法
  17. vue重复访问同一路由报错
  18. 赛尔号服务器维护时间4月27,赛尔号03月27日更新攻略汇总 瀚海界神重获新生
  19. 千万别在朋友圈骂人,要被罚1000元!
  20. window系统下nodejs安装及环境配置

热门文章

  1. mysql从myisam_将MySQL从MyISAM转换成InnoDB错误和解决办法
  2. 基于tcp connect的端口扫描程序
  3. linux査 到漠河 装apache,如何在Ubuntu上搭建一台安全的Apache Web服务器
  4. dp笔记:关于DP算法和滚动数组优化的思考
  5. 数据科学和统计学_数据科学中的统计
  6. icse ccf_ICSE的完整形式是什么?
  7. SDP协议基本分析(RTSP、WebRTC使用)
  8. 如何在电脑上截屏_如何在电脑上截图?教你6种常用的截图方法,总有你不知道的...
  9. ZOj 2104——Let the Balloon Rise
  10. 2.两数相加 golang