Android Cursor странное поведение - PullRequest
3 голосов
/ 06 мая 2010

После многих часов поиска ошибок в большом приложении я наконец-то отследил ошибку. Эта регистрация фиксирует проблему:

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"));

но это ужасно и не оптимизировано. Любые предложения о причинах такого поведения приветствуются.

Приветствия

1 Ответ

1 голос
/ 06 мая 2010

Я верю, что решил это: После обновления интерфейса базы данных все данные перед вставкой были преобразованы в строку с помощью функции String.valueOf (). Поэтому вместо «1» в базу данных был введен «true». Разница не была показана с моими инструментами управления базами данных. Почему это значение равно 0 с помощью функции getInt (), я не знаю, но, похоже, это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...