0

我目前正在开发一个应用程序,该应用程序使用数据库/ ContentProvider提供从网络中拉出并定期存储在数据库中的某些位置数据。奇数光标行为

我已验证数据库是在应用程序中正确创建的,并且通过将应用程序本地数据库的副本导出到SD卡以在SQL浏览器中查看来填充数据表 - 所以数据不是在场并不是问题。

奇怪的行为可能会更好过了几个我的调试过程中的截屏的可视化:

所以,最初的时候我做了我的疑问,我所有的Cursor对象是为行数返回-1,甚至尽管我验证了SELECT * FROM TABLE_NAME语句应该返回值,因为从设备中取出的数据库包含行数据。下面就来看看在调试器步:

enter image description here

注意,当光标开始返回,mCount显示为-1。

出于好奇,我添加了cursor.moveToFirst();打电话,而这里的从步骤后的屏幕截图:

enter image description here

注意,光标计数改变从-1到3,其对应于正确的行数(因为应用程序只占3个大洲大气压)。不幸的是,这个应该是不必要的添加行仍然不能解决我的问题,因为CursorAdapter.bindView()和CursorAdapter.newView()仍然无法使用生成的游标进行调用。

我很困惑什么可能导致此问题,以及如何解决它?如果任何人都可以提供有关问题的信息,请告诉我。此外,如果需要额外的代码,比如SQL创建语句等,让我知道 - 但是,正如我已经提到的那样,数据库创建正常,并且在Android应用程序之外的导出数据库副本上执行的查询工作得很好...

最后一件事,该应用程序是为API等级14+构建的。

回答

0

如果您有一个正在从数据库中读取的SQL查询,您将希望延迟读取该数据,直到您确定要使用它。

因此,当您拨打rawQuery时,您会收到对Cursor对象的引用。但没有任何东西可读。这是moveToFirst所做的。这是第一件事告诉游标,你是认真的运行这个SQL查询,并且你想要一个结果。

但是,由于您使用的是rawQuery,因此在尝试使用moveToFirst获取结果之前,没有任何内容传递到数据库。

希望这回答你的问题。

+0

啊,我之前没有意识到那种行为。谢谢。我仍然遇到CursorAdapter.bindView()和CursorAdapter.newView()没有被调用的问题......但我想这可能是一个单独的问题。 – Submersed