2011-06-10 55 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

相关问题