2011-06-10 38 views
0

我有一個數據庫,有10,000個條目。數據庫沒有定期更新,但我需要經常從中獲取數據。如何在Android中存儲列表<String>作爲資源?

我給選擇一行的選項之一是帶有文本過濾的ListView。

但是,ListView需要幾秒鐘才能加載。這次是查詢數據庫並將Cursor的結果放入列表中。所以我決定每當數據庫更新時創建List,每當我想製作ListView時使用它。

我需要關於如何存儲List的指針,以便我可以立即檢索它並顯示ListView。

任何你可以提供的替代品也將不勝感激。

UPDATE:

我最初的代碼:

public List<String> fetchNames() { 
    String[] columns={NAME_KEY}; 
    List<String> names = new ArrayList<String>(); 
    Cursor namesCursor=mydb.query(TABLE_NAME, columns, null, null, null, null, NAME_KEY, null); 
    Log.w("1", "Got query result"); 
    namesCursor.moveToFirst(); 
    while(!namesCursor.isAfterLast()){ 
     names.add(namesCursor.getString(0)); 
     namesCursor.moveToNext(); 
    } 
    Log.w("1", "List created"); 
    return names; 
} 

所花費的時間 「得到查詢結果」 和 「創建列表」 之間約5秒記錄。

我修改了代碼中使用的CursorAdapter

public SimpleCursorAdapter fetchNames() { 
    String[] columns={"_id", NAME_KEY}; 
    String[] from={NAME_KEY}; 
    int[] to={R.id.list_item_1}; 
    Cursor namesCursor=mydb.query(TABLE_NAME, columns, null, null, null, null, NAME_KEY, null); 
    Log.w("1", "Got query result"); 
    SimpleCursorAdapter names = new SimpleCursorAdapter(dbContext, R.layout.list_item, namesCursor, from, to); 
    Log.w("1", "Returning CursorAdapter"); 
    return names; 
} 

活性仍然需要5秒來加載,但只有在「返回CursorAdapter的」被記錄。

我覺得延遲是從光標讀取的,這就是爲什麼我想把它作爲一個快速獲取資源存儲的原因。如果我錯誤地認爲作爲資源中的字符串數組,它會加載得更快,請糾正我。

回答

1

爲什麼不使用附加到ListView的CursorAdapter而不是將數據提取到List中?它會在數據庫更改時自動更新,並且效率會更高。

+0

感謝您的回覆,但它仍然沒有解決我的問題。我編輯了我的問題以包含代碼和細節。我做錯了哪些事需要時間? (我不需要它在數據庫更改時更新,因爲數據庫更新很少。) – SuhailSherif 2011-06-10 14:30:40

+0

回顧最初的問題,10,000條條目非常多。如果我是一個面對這麼多條目的用戶,我認爲我會覺得這很令人生畏,並且可能很難在列表中找到我期待的內容。您是否考慮過改變數據呈現方式,將其分解爲操作系統和用戶更易於管理的塊? – 2011-06-10 14:42:32

+0

是的,我曾考慮過這個問題,但查找10,000條正確條目的主要功能是ListView的過濾器。這將需要(我想)所有的條目被加載。 – SuhailSherif 2011-06-10 15:29:35