游标不包含存在的列

时间:2017-03-17 20:06:30

标签: android sqlite odk

我有一个数据库和我正在修改的Android应用程序(Open Data Kit),它跟踪一组.xml文档的状态和其他相关信息,这些文档表示为表单。

为了方便ListView向用户显示有关这些表单的信息,我使用游标将查询中的信息保存到数据库中 (是的,我知道不推荐使用managedquery):

    String selection = InstanceColumns.RANDOM_ID + " = ? AND " 
    + InstanceColumns.STATUS + " = ? AND " + InstanceColumns.JR_FORM_ID + " = ?";

     String[] selectionArgs = {"2433", InstanceProviderAPI.STATUS_COMPLETE, "sample"};
     String sortOrder = InstanceColumns.STATUS + " DESC, " 
     + InstanceColumns.DISPLAY_NAME + " ASC";

     Cursor c = managedQuery(InstanceColumns.CONTENT_URI, null, selection, selectionArgs,
                    sortOrder);

在我当前的设置中,这将返回1行,10列的游标。但是,我应该得到11列 - 我错过了与InstanceColumns.RANDOM_ID

对应的列

这一行是表的新内容 - 在我开始编写代码之前,前一行已预先存在。

我知道这些列存在于我的数据库中。我在我的代码中的其他地方写了它,我也手动检查了.db文件,它确实包含我插入的列和数据。

如果需要,我可以提供更多代码(我怀疑它会是这样),但是这个应用程序相当庞大且开源。这可能是由于我不知道的某些内部设置造成的。

这就是我遇到的崩溃:

E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 10 columns.

通常每当我尝试访问该列时,例如:

int randomID = c.getInt(c.getColumnIndex(InstanceColumns.RANDOM_ID));

这是一个干净的安装,以确保新的数据库文件,并在模拟器和我的设备上发生。

如何让我的光标包含表格的所有行?

1 个答案:

答案 0 :(得分:0)

回过头来关闭,在代码中的其他地方定义了一个投影哈希映射,我在经过多次挖掘后发现了对查询表的限制。向哈希映射添加行并更新它允许查询通过。