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