gpt4 book ai didi

android - 为什么/我们应该在 Android 中使用 Content Provider 时实现 BaseColumns?

转载 作者:可可西里 更新时间:2023-11-01 18:45:43 25 4
gpt4 key购买 nike

我正在浏览 Google 的源代码 IOSched App 并注意到以下代码 fragment 作为其 Content Provider 实现的一部分:

公共(public)静态类 Blocks 实现 BlocksColumns、BaseColumns

据我所知BaseColumns只是两个常量的接口(interface):_COUNT_ID

我有两个问题:

  1. 与直接在类中拥有私有(private)字段 _ID 相比,实现 BaseColumns 的优点/缺点是什么?

  2. 常量_COUNT有什么作用?

最佳答案

根据Android Developer Guide ,

Note: A provider isn't required to have a primary key, and it isn't required to use _ID as the column name of a primary key if one is present. However, if you want to bind data from a provider to a ListView, one of the column names has to be _ID. This requirement is explained in more detail in the section Displaying query results.

本指南继续解释为什么您需要主键提供的唯一值的基础知识,

Table data should always have a "primary key" column that the provider maintains as a unique numeric value for each row. You can use this value to link the row to related rows in other tables (using it as a "foreign key"). Although you can use any name for this column, using BaseColumns._ID is the best choice, because linking the results of a provider query to a ListView requires one of the retrieved columns to have the name _ID. [emphasis mine]

按照您提供的顺序回答您的问题:

  1. 拥有 _ID 列是实现多功能性的最佳实践。它不必显示,但作为游标和查询所需的主键(和外键!)效果非常好。
    • 让 BaseColumns 识别它会自动将此列识别为主键,唯一(显然),并指示它自动递增。
    • 据推测,实现 BaseColumns 比为您的私有(private)字段键入这些属性更容易。
  2. _COUNT is just the count of the number of rows in a directory.如果正在删除和添加表的行,则没有理由相信项目的 _ID 整数与其添加时间或其排序属性有任何关系。换句话说,last_insert_rowid() 不等于 Count()。 _COUNT 列只是提供了一种方法来显示查询返回了多少结果,在该查询的每一行中。有关视觉引用,请参阅 linuxtopia.org

关于android - 为什么/我们应该在 Android 中使用 Content Provider 时实现 BaseColumns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com