Android Cursor 奇怪的行为

标签 android sqlite cursor

在大型应用程序中搜索了很多小时的错误后,我终于找到了错误。此日志记录捕获了问题:

Log.d(TAG,"buildList, DBresult.getInt(1): "+DBresult.getInt(1));
Log.d(TAG,"buildList, DBresult.getString(1): "+DBresult.getString(1));
Log.d(TAG,"buildList, DBresult.getInt(4): "+DBresult.getInt(4));
Log.d(TAG,"buildList, DBresult.getString(4): "+DBresult.getString(4));

结果输出:

05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getInt(1): 0
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getString(1): false
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getInt(4): 0
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getString(4): true

没有后台线程在运行。正如您所看到的,问题是“0”在一种情况下被解释为假,而在另一种情况下被解释为真。由于我完全不知道这是怎么发生的,所以我不知道如何进行。什么可能导致这种行为?两列都是“ bool 值”类型,即 sqlite 中的数字。不幸的是,返回的字符串是正确的值,而整数始终为 0。如果我将数据库导出到我的计算机并使用 SQlite Administrator 检查它,我可以看到值设置正确,只有 getInt() 函数总是返回 0。我知道这在我编写的其他应用程序中有效,但我不知道为什么它停止工作。

我试过在2.0、2.0.1、2.1下编译代码,总是出现。我可以通过获取这样的 bool 值让我的应用程序再次运行:

myBool= (DBresult.getString(0).equals("true"));

但这既丑陋又没有优化。欢迎就导致此行为的原因提出任何建议。

干杯,

最佳答案

我相信我解决了它: 在更新数据库接口(interface)之后,插入之前的所有数据都通过 String.valueOf() 函数转换为字符串。因此,数据库中输入的不是“1”,而是“true”。我的数据库管理工具没有显示出差异。我不知道为什么这会被 getInt() 函数隐藏为“0”,但这似乎就是问题所在。

关于Android Cursor 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780031/

相关文章:

android - 单击 coverflow 更改 View - Android

android - 与 android NativeActivity 一起使用的方法列表

android - 这里 Maps Android SDK PositioningManager 启动方法返回 false

java - 无法显示生日提醒

mysql - 设置存储参数时出现问题

Java 不释放 oracle 游标

android - AndEngine GLES 2.0 - 电源按钮问题 - 应用程序崩溃 onResume()

android - 如何为其项目填充具有两种不同布局的 CustomListView?

sqlite - SQLITE3:恒定时间行寻址

mysql - 需要获取Cursor插入的数据与MySQL中的cursor