在一個大應用程序中搜索了很多錯誤之後,我終於找到了這個錯誤。這個日誌抓住了問題:Android遊標奇怪的行爲
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
沒有運行backgroung線程。正如你所看到的,問題是'0'在一次被解釋爲false,在另一個時被解釋爲false。由於我完全喪失瞭如何發生這種情況,我不知道如何繼續。什麼可能導致這種行爲?這兩列的類型都是「boolean」,即sqlite中的一個數字。不幸的是,返回的字符串是正確的值,而整數始終爲0.如果我將數據庫導出到我的計算機並使用SQlite Administrator進行檢查,我可以看到值已正確設置,它只是getInt()函數總是返回0.我知道這個事實,這在我編碼的其他應用程序中起作用,我不知道爲什麼它停止工作。
我試着編譯2.0,2.0.1和2.1下的代碼,它總是出現。我可以通過獲取像這樣的布爾值來使我的應用程序再次運行:
myBool= (DBresult.getString(0).equals("true"));
但這樣既醜又不優化。歡迎任何關於造成這種行爲的建議。
乾杯,
請問您可以添加插入語句和表格詳細信息嗎? – Karan 2010-05-06 10:28:13
謝謝,由於您的要求,我直接跑到了問題的來源=) – pgsandstrom 2010-05-06 12:13:39
我覺得有趣的是沒有getBoolean方法實現。不過,我傾向於使用整數而不是布爾值,因爲空間非常便宜。 – Kieveli 2010-05-06 12:31:42