我目前正在开发一个应用程序,它使用Database / ContentProvider提供从网络中提取并定期存储在数据库中的某些位置数据。
我已经验证数据库是在应用程序中正确创建的,并且通过将应用程序本地数据库的副本导出到SD卡以便在SQL浏览器中查看来填充数据 - 因此数据不是现在不是问题。
通过我的调试过程的几个屏幕截图可能更好地显示奇怪的行为:
所以,最初当我执行查询时,所有Cursor
个对象都返回-1表示行数,即使我验证了SELECT * FROM TABLE_NAME
语句应该返回值,因为数据库I拉出设备包含行数据。以下是调试器步骤:
请注意,最初返回光标时,mCount显示为-1。
出于好奇,我添加了cursor.moveToFirst();电话,这是一步之后的截图:
请注意,游标数从-1更改为3,这对应于正确的行数(因为应用程序仅占3个大洲atm)。不幸的是,这个不必要的添加行仍然无法解决我的问题,因为CursorAdapter.bindView()和CursorAdapter.newView()仍然无法使用生成的游标进行调用。
我对可能导致此问题的原因以及如何解决这个问题感到困惑?如果有人能够对问题可能提供任何见解,请告诉我。此外,如果需要任何其他代码,例如SQL create语句等,请告诉我 - 但是,正如我已经提到的那样,数据库创建正常,并且在Android应用程序之外的导出数据库副本上执行的查询工作正常...
最后一点,该应用程序是为API级别14 +。
构建的答案 0 :(得分:0)
如果您有一个从数据库中读取的SQL查询,您可能希望延迟读取该数据,直到您确定要使用它为止。
因此,当您致电rawQuery
时,您会获得对Cursor
对象的引用。但还没有读到。这就是moveToFirst
的作用。这是第一个告诉游标你认真对待运行这个SQL查询并且你想要一个结果的东西。
但是,由于您使用的是rawQuery
,因此在尝试使用moveToFirst
获取结果之前,不会将任何内容传递给数据库。
希望这能回答你的问题。