在一个大型应用程序中搜索了许多小时的bug后,我终于找到了这个bug。此日志记录捕获问题:
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”在一种情况下被解释为false,在另一种情况下被解释为true。因为我完全不知道这是怎么发生的,所以我不知道如何继续下去。什么可能导致这种行为?这两列都是“boolean”类型,即sqlite中的数字。不幸的是,返回的字符串是正确的值,而整数始终为0。如果我将数据库导出到我的计算机并与sqlite administrator进行检查,我可以看到这些值设置正确,那么只有getint()函数始终返回0。我知道这在我编写的其他应用程序中也能正常工作,但我不知道这为什么会停止工作。
我试过在2.0、2.0.1和2.1下编译代码,但它总是出现。我可以通过获取如下布尔值使我的应用程序再次运行:
myBool= (DBresult.getString(0).equals("true"));
但这既丑陋又不优化。欢迎就造成这种行为的原因提出任何建议。
干杯,