如何将List <string>存储为Android中的资源?</string>

时间:2011-06-10 06:47:06

标签: android database

我有一个包含10,000个条目的数据库。数据库不会定期更新,但我需要经常从中获取数据。

我给选择行的一个选项是带有文本过滤的ListView。

ListView需要几秒钟才能加载。此时间用于查询数据库并将Cursor的结果放入List中。因此,我决定在数据库更新时创建列表,并在每次我想创建ListView时使用它。

我需要有关如何存储List的指示,以便我可以立即检索它并显示ListView。

您也可以提供任何替代方案。

更新:

我的初始代码:

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 个答案:

答案 0 :(得分:1)

为什么不使用附加到ListView的CursorAdapter而不是将数据提取到List中?它会在数据库发生变化时自动更新,并且效率会更高。