После многих часов поиска ошибок в большом приложении я наконец-то отследил ошибку. Эта регистрация фиксирует проблему:
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» интерпретируется как ложное в одном случае и как истинное в другом. Поскольку я совершенно заблудился, как это может произойти, я не знаю, как действовать дальше. Что может привести к такому поведению? Оба столбца имеют тип «логический», то есть числовой в sqlite. К сожалению, возвращаемая строка является правильным значением, в то время как целое число всегда равно 0. Если я экспортирую базу данных на свой компьютер и проверю ее с помощью SQlite Administrator, я вижу, что значения установлены правильно, это только функция getInt () всегда возвращает 0. Я точно знаю, что это работает в других приложениях, которые я написал, и я не знаю, почему это перестало работать.
Я попытался скомпилировать код под 2.0, 2.0.1 и 2.1, и он всегда появляется. Я могу снова запустить приложение, получая логические значения, например:
myBool= (DBresult.getString(0).equals("true"));
но это ужасно и не оптимизировано. Любые предложения о причинах такого поведения приветствуются.
Приветствия