在ListActivity中加载BIG SQLiteDatabase

时间:2013-04-01 10:56:20

标签: android sqlite android-sqlite

我正在开发一个我需要快速完成的Android项目。

该应用程序的一个功能是加载SQLite数据库内容并将其列在ListActivity中的ListView中。

数据库包含几个表,其中2个表非常大。

数据库中的每个项目都有很多列,其中我需要显示至少2个(名称,价格),但最好是3个。

这似乎是一项非常简单的任务,因为在应用程序的这一部分我需要做的就是读取数据库并列出它。我做了这个没有任何问题,测试应用程序与小样本数据库。

在我的第一个版本中,我使用Cursor获取查询,然后使用ArrayAdapter作为列表的适配器,在查询之后我只是从开始到结束循环游标,并且对于每个位置我将Cursor的内容添加到适配器。

onItemClickListener再次查询数据库与其他参数(基本上我打开类别),因此它清除了适配器,然后循环Cursor并将其内容重新添加到适配器。

该应用程序就像一个魅力,但当我使用现实生活中的大数据库(> 300MB)时,我突然让我的应用程序花了很长时间来显示内容,有时甚至阻止。

所以我做了一些研究并开始使用SimpleCursorAdapter,它使用通常的参数(String [] from,int []等来自动将Cursor的内容链接到ListView,其中我使用了android.R.layout。 simple_list_item_2和android.R.id.text1和text2)。

问题是,加载时间不会太大。

我在不同的网站和教程中遇到了一些建议的解决方案,其中大多数都以某种方式使用AsyncTask类。我自己尝试手动实现这个,但很难跟踪多个线程而且我失败了。

教程不断告诉内容提供商如何做到这一点,但我发现我的具体情况并不清楚:非常大的SQLite数据库 - >读到ListView。

现在我的头脑里充满了像LoaderManager,LoaderAdapter等概念,所有这些都混淆了我的脑袋。

有人可以为我提供一个完整,漂亮,干净的解决方案来完成这个“简单”的任务吗?

再次:我想阅读一个BIG SQLiteDatabase并在ListView中显示它。我希望应用程序不要阻止。

我需要一个具有成员函数的类,该函数将查询和ListActivity的上下文作为参数,并自行处理在视图中显示查询结果。

请不要提供抽象答案。我已经没时间了,我现在很困惑,我需要一个干净的完整解决方案。

你是我唯一的希望。

3 个答案:

答案 0 :(得分:3)

如果您查询这样的大型数据库,它将需要tym,您需要找到一种智能方式,

比限制数据库查询获取前10个或30个项目然后维护,一旦达到最后一个项目,查询剩余30个项目并绑定它们

参考本教程,它将教您如何在列表视图中动态添加数据

http://p-xr.com/android-tutorial-dynamicaly-load-more-items-to-the-listview-never-ending-list/

上面的列表已经过了chk this

http://mobile.dzone.com/news/android-tutorial-dynamicaly

答案 1 :(得分:1)

如果查询大型数据库,则需要一些时间来获取数据并在列表视图上显示它。因此,最好在运行时填充数据。您可以使用Lazy Adapter概念加载数据。此链接1可能对您有用。

由于

答案 2 :(得分:1)

你也可以使用:

public class TodosOverviewActivity extends ListActivity implements
    LoaderManager.LoaderCallbacks<Cursor>

查看此link了解详情。