這是一個有趣的問題,我感到震驚的問題在互聯網上沒有被更多地詢問。 Android的CursorAdapter非常有用,一旦你啓動並運行ContentProvider並學習如何使用它,但由於需要將_id字段作爲其查詢的一部分(在沒有它的情況下拋出錯誤),它是有限的。原因如下:Android的SimpleCursorAdapter使用DISTINCT查詢
我的具體問題是我有兩個調整器:一個調整器應該包含來自數據庫的唯一「類別」名稱,另一個應該填充來自所選「類別」的所有數據庫條目(類別是列名稱,在這裏)。這似乎是許多程序可能使用的非常簡單的設置,不是?試圖實現第一個微調是我遇到問題的地方。
這裏,我想對於第一微調查詢:
SELECT DISTINCT category FROM table;
進行此查詢,因爲_id列時,必須作爲查詢的一部分上的CursorAdapter拋出一個錯誤。將_id列添加到投影中自然會返回表的每一行,因爲您現在也要求不同的id,並且每個id都是不同的(根據定義)。很明顯,我寧願每個類別名稱只看到一個條目。
我已經實現了一種解決方法,它只是簡單地進行上面的查詢,然後將結果複製到ArrayAdapter中。我之所以寫這篇文章是爲了看看這個奇怪的小問題是否有更優雅的解決方案,並開始討論我可以做得更好。備用實施建議,例如使用不同類型的控制或適配器,非常受歡迎。
哦,這看起來像優秀的數據庫設計我!爲了讓我的內容提供者儘可能簡單,我被告知要儘量減少表的數量,否則我會按照你的建議去做。感謝您添加此! – SilithCrowe 2011-02-15 17:11:44
您的內容提供者可以使用多表查詢來處理提供給它並從其返回的行中的類別名稱。看看SQL「join」指令。 – 2011-02-17 08:13:40