我有一个数据库和我正在修改的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));
这是一个干净的安装,以确保新的数据库文件,并在模拟器和我的设备上发生。
如何让我的光标包含表格的所有行?
答案 0 :(得分:0)
回过头来关闭,在代码中的其他地方定义了一个投影哈希映射,我在经过多次挖掘后发现了对查询表的限制。向哈希映射添加行并更新它允许查询通过。