2013-04-15 19 views
0

我正在處理一個應該處理用戶的Android聯繫人並與SQL數據庫進行交互的類,您可以將手機的聯繫人移動到(數據庫中的信息將顯示爲ListView)。我做了一個應該按名稱檢索Android聯繫人的函數,並返回該聯繫人的所有信息。我的功能如下:我應該通過名稱獲取Android聯繫人的函數是否返回一個Cursor或其他東西?

public Cursor getContactByName(String name) 
{ 
    Uri uri = ContactsContract.Data.CONTENT_URI; 
    String[] projection = null; 
    String selection = Data.DISPLAY_NAME + "=?"; 
    String[] selectionArgs = new String[]{name}; 
    String sortOrder = null; 

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

所以這個想法是,這將被另一個函數調用,它會首先檢查聯繫人是否存在。該函數將返回一個只包含該聯繫人信息的遊標。首先,我想知道如果我正確地返回包含聯繫人信息的Cursor,還是應該創建一個存儲此信息並返回該類的對象的類?或者,也許我應該返回一個字符串?請記住,我要返回的是我打算移動到數據庫的聯繫人,我覺得返回一個光標不是我應該瞄準的目標。而作爲一個側面問題,是否有任何理由使用ContentResolver.query代替managedQuery來達到我的目的?

回答

0

這取決於你將要使用的數據。如果你打算把它添加到另一個數據庫中(正如你的問題所建議的那樣),你最好將它作爲遊標保留下來,然後在第二個數據庫中輸入該遊標。如果你喜歡將你的數據庫行映射到對象,那就這麼做。記住對象關係映射需要更多的內存和週期,但通常會產生更清晰的代碼。這真的取決於你作爲程序員(抱歉,我知道這不是你想聽到的)。

+0

好的,這回答我的問題。謝謝!雖然這樣保存遊標沒有問題,對吧?我可以從數據庫中獲取光標並從中獲取信息,就像我在創建後仍然處理它一樣?我對Android開發非常陌生,所以遊標仍然有點混亂。 – Cheddar

+0

@Cheddar你以前不得不擔心關閉遊標,但是我認爲遊標自己管理自己並不是一個問題。只要你確定關閉數據庫連接,你應該沒問題。 – dcow

0

我個人更喜歡創建一個對象Contact。所以你更靈活,你也可以在這個類(或相關的DAO)中實現與你的對象相關的函數。
將值作爲Cursor或甚至String給予更多的麻煩比它會幫助你。在一個對象中,您可以精確地查看所有屬性的名稱,使用遊標必須知道相應字段的名稱或位置,並且在字符串中,您甚至必須解析結果。

編輯:
作爲@DavidCowden提到,它強烈依賴於你想達到什麼。所以我的猜測是,你想加載你的數據並將其顯示在某個地方。
正如已經提到的,在這種情況下,我更喜歡單獨的班,因爲它更清潔和可維護。

+0

雖然使用對象會更清潔,但我擔心它會佔用更多的內存。我在這個項目上工作的一個人做了一個SMS數據庫並將SMS作爲對象返回,但他的XML頁面運行得並不順利。很明顯,短信息會比聯繫人更多,但是將聯繫人作爲對象返回時,內存會成爲一個擔心的問題? – Cheddar

+1

在你的情況下,我不會擔心內存。使用一些數據庫查詢來讀取聯繫人沒有昂貴的計算。如果我理解你的權利,你只能閱讀一個內容?我真的認爲使用遊標工作要困難得多。 –

+0

@切達是的,正如Obl Tobl所建議的那樣,記憶不應該成爲問題。再次,現在去做最乾淨的任何事情,如果需要的話*稍後優化*。 – dcow

相關問題