【问题标题】:Android Content Provider With two Tables With Same Column Names具有两个具有相同列名的表的 Android 内容提供程序
【发布时间】:2012-12-18 14:14:52
【问题描述】:

我正在编写一个带有几个表的 Android 内容提供程序。假设我们有一张名为 testData 的表和一张名为 testDataInspector 的表。在 testData 中有一个名为 createdDate 的列,在 testDataInspector 中有另一个名为 createdDate 的列。我发现在内容提供程序中,当已经存在 testData.createdDate 时,SDK 找不到名为 testDataInspector.createdDate 的列。我发现我需要在列名中添加表名的前缀,以便区分表之间的不同列名。当我想查询 testDataInspector 的 contentProvider 时,它不会在不同的表中找到两个同名的列名。我有正确的 URI,并且正确使用了 URI 匹配器。我的插入工作正常。

示例:

(用于表 testData)

int creatorId = c.getColumnIndex(TestDataMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataMetaData.CREATED_DATE_COLUMN_NAME);

(用于表 testDataInspector)

int formName = c.getColumnIndex(TestDataInspectorMetaData.FORM_NAME_COLUMN_NAME);
int data = c.getColumnIndex(TestDataInspectorMetaData.DATA_COLUMN_NAME);
int creatorId = c.getColumnIndex(TestDataInspectorMetaData.CREATOR_ID_COLUMN_NAME);
int createdDate = c.getColumnIndex(TestDataInspectorMetaData.TESTDATA_CREATED_DATE_COLUMN_NAME);

还有其他人遇到过这个吗?我想知道它是否与 SQLite 内部的指针有关。在任何高于 2.2 的 SDK 版本中编译应用程序时,我发现这是正确的。我意识到 ContentProviders 主要用于,但必须是一次一张表的规则。

我的另一个问题是否与列在 ContentProvider 本身的 ProjectionMap 中的别名方式有关。我过去曾与内容提供商合作过,但通常它们只有一张桌子。与我过去习惯的相比,我目前正在进行的项目需要一个相当广泛的数据库。对这个问题的任何帮助都会有所帮助,因为我找到了解决方法并且不能花时间去研究为什么。

【问题讨论】:

  • 你如何检索 c(光标)?
  • 我只是在测试客户端应用程序中进行托管查询。保持测试简单。

标签: android android-contentprovider


【解决方案1】:

好的,这是我的错误。我道歉。这确实与内容提供者中的投影图有关。我没有为哈希映射中的列名添加正确的别名。对于制造任何问题,我深表歉意。为了引用 c,我在开发一个简单的客户端应用程序以访问内容提供者时,在 Activity 中进行托管查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2012-05-26
    相关资源
    最近更新 更多