0

我正在编写一个带有几个表的 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 中的别名方式有关。我过去曾与内容提供商合作过,但通常它们只有一张桌子。与我过去习惯的相比,我目前正在进行的项目需要一个相当广泛的数据库。对这个问题的任何帮助都会有所帮助,因为我找到了解决方法并且不能花时间玩为什么。

4

1 回答 1

0

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

于 2012-12-18T14:38:21.730 回答