草庐IT

android - Android 投影图在内容提供者中的用途是什么?

coder 2023-11-19 原文

我正在查看 <path_to_SDK>/samples/android-16/NotePad/src/com/example/android/notepad 中的 Android 记事本应用程序示例代码.

我想知道是否有人可以向我解释为什么 NotepadProvider.java 中需要以下代码?

// Creates a new projection map instance. The map returns a column name
// given a string. The two are usually equal.
sNotesProjectionMap = new HashMap<String, String>();

// Maps the string "_ID" to the column name "_ID"
sNotesProjectionMap.put(NotePad.Notes._ID, NotePad.Notes._ID);

// Maps "title" to "title"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_TITLE,NotePad.Notes.COLUMN_NAME_TITLE);

// Maps "note" to "note"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_NOTE, NotePad.Notes.COLUMN_NAME_NOTE);

// Maps "created" to "created"
sNotesProjectionMap.put(NotePad.Notes.COLUMN_NAME_CREATE_DATE, NotePad.Notes.COLUMN_NAME_CREATE_DATE);

// Maps "modified" to "modified"
sNotesProjectionMap.put(
        NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE,
        NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE)

我注意到稍后在 query() 中使用了投影图方法:

...
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(NotePad.Notes.TABLE_NAME);

/**
 * Choose the projection and adjust the "where" clause based on URI pattern-matching.
 */
switch (sUriMatcher.match(uri)) {
    // If the incoming URI is for notes, chooses the Notes projection
    case NOTES:
    qb.setProjectionMap(sNotesProjectionMap);
    break;
...

为什么需要这张投影图?

最佳答案

SDK 演示中的Notepad 应用程序是一个示例应用程序,它应该是 API 使用和使用这些 API 的良好实践的示例,这就是为什么它们可能使用投影图。尽管 Notepad 示例实际上并不需要投影图,但在需要投影图时,使用投影图可以很好地展示更复杂的情况。例如,如果我没记错的话,一位 Google 工程师编写的 Shelves 应用程序在其 ContentProvider 中使用了投影图,而该投影图不仅仅是一个简单的具有相同键值对的映射。

我还添加了指向方法文档的链接 SQLiteQueryBuilder.setProjectionMap其中详细说明了为什么需要投影图。

关于android - Android 投影图在内容提供者中的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750688/

有关android - Android 投影图在内容提供者中的用途是什么?的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - Ruby 中匿名结构的用途是什么? - 2

    它们可以这样定义Struct.new(:x,:y)但是用它们能做什么?具体来说,如何创建这种结构的实例?这行不通Struct.new(:x=>1,:y=>1)(您收到TypeError:can'tconvertHashintoString)。我正在使用Ruby1.9.2。更新:目前为止很好的指点,谢谢。我想我问这个的原因是我有好几次发现自己想要这样做Struct.new(:x=>1,:y=>1)这样我就可以在可以编写obj.x的地方传递一个对象,而不是说,实例化一个散列并必须编写obj[:x].在这种情况下,我希望该结构真正是匿名的-我不想通过命名从Struct.new调用返回的内容来

  3. ruby - Ruby 中 Enumerator 类的用途是什么 - 2

    如果我像这样创建一个枚举器:enum=[1,2,3].each=>#enum是枚举器。这个对象的目的是什么?我不能这样说:enum{|i|putsi}但我可以这样说:enum.each{|i|putsi}这似乎是多余的,因为Enumerator是用.each创建的。它似乎正在存储一些关于each方法的数据。我不明白这是怎么回事。我确信我们有这个Enumerator类是有一些合乎逻辑的原因的,但是它能做什么而Array不能呢?我想也许它是Array和其他Enumerable的祖先,但它似乎不是。Enumerator类存在的确切原因是什么?它会在什么情况下使用?

  4. ruby - Chef - 提供者内的模板找不到源 - 2

    我有一些nginx站点的资源和提供程序,它可以为站点写出配置文件。action:startdotemplate"/etc/nginx/sites-enabled/my_site"dosource"nginx_site.conf.erb"notifies:reload,"service[nginx]"endend当我从另一本Recipe中使用它时,找不到模板nginx_site.conf.erb,因为Chef正在寻找调用此资源的模板。有没有办法告诉Chef在nginx资源和提供者Recipe中寻找模板? 最佳答案 您可以为templa

  5. ruby - NilClass、TrueClass 和 FalseClass 的用途是什么 - 2

    NilClass、TrueClass和FalseClass各有一个实例,即nil、true和false,它们是常量,拥有这些类的目的是什么?为什么它们不能是Object类的实例,并且所有相关方法都简单地定义为nil、true和上的单例方法错误?一个相关的问题是,为什么不将这些定义为常量? 最佳答案 它遵循“一切皆对象”和“对象由它们作为实例的类专门化”的思想。nil、true和false都是对象(因此是具有方法的类的实例化)。它们是1)各自类型的唯一居民并且是2)不可变对象(immutable对象)的强加允许实现优化-实际上,不是一

  6. ruby-on-rails - Ruby/Rails 中的检测 API 的用途是什么? - 2

    基于:http://api.rubyonrails.org/classes/ActiveSupport/Notifications.html它说:NotificationsprovidesaninstrumentationAPIforRuby.ToinstrumentanactioninRubyyoujustneedtodo:InstrumentationAPI到底是什么,它有什么作用?谢谢! 最佳答案 关于这个主题有一个非常好的railscast:http://railscasts.com/episodes/249-notific

  7. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  8. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  9. c - Ruby 的 Enumerable#zip 是否在内部创建数组? - 2

    在Ruby-ComparetwoEnumeratorselegantly,据说Theproblemwithzipisthatitcreatesarraysinternally,nomatterwhatEnumerableyoupass.There'sanotherproblemwithlengthofinputparams我查看了YARV中Enumerable#zip的实现,并看到了staticVALUEenum_zip(intargc,VALUE*argv,VALUEobj){inti;IDconv;NODE*memo;VALUEresult=Qnil;VALUEargs=rb_ar

  10. ruby - Jekyll 存档页面中的嵌套液体循环不起作用。在内部条件中使用外部循环变量 - 2

    我正在使用jekyllstaticsitebuilder,我有难以执行以下操作:{%forcategoryinsite.categories%}{{category[0]}}{%forpostinsite.categories[{{category}}]%}{{post.title}}{%endfor%}↩{%endfor%}我的jekyll站点中有一个名为“测试”的帖子类别,我可以使用以下内容显示来自它的帖子:{%forpostinsite.categories.test%}{{post.title}}{%endfor%}但是,我想自动构建一个存档页面,并按顺序为此,我需要

随机推荐