【问题标题】:Loading a BIG SQLiteDatabase in a ListActivity在 ListActivity 中加载 BIG SQLiteDatabase
【发布时间】:2013-04-01 10:56:19
【问题描述】:

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

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

数据库包含几张表,其中有两张非常大。

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

这似乎是一项非常容易的任务,因为在应用程序的这一部分中我需要做的就是读取数据库并列出它。我没有任何问题地做到了这一点,测试了应用程序与一个小型示例数据库。

在我的第一个版本中,我使用 Cursor 来获取查询,然后使用 ArrayAdapter 作为列表的适配器,在查询之后,我只需从头到尾循环游标,并为每个位置添加游标的内容到适配器。

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

该应用程序运行起来非常棒,但是当我使用现实生活中的大型数据库 (>300MB) 时,我的应用程序突然需要很长时间才能显示内容,有时甚至会阻塞。

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

问题是,加载时间并没有太大变化。

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

教程一直在告诉如何使用内容提供程序执行此操作,但我发现我的具体情况并不清楚:非常大的 SQLite 数据库 -> 读取到 ListView。

现在我的脑海中充满了诸如 LoaderManager、LoaderAdapter 等概念,所有这些都在我的脑海中混杂在一起。

谁能给我一个完整、漂亮、干净的解决方案来完成这个“简单”的任务?

再次:我想读取 BIG SQLiteDatabase 并将其显示在 ListView 中。我希望该应用程序不被阻止。

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

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

你是我唯一的希望。

【问题讨论】:

    标签: android sqlite android-sqlite


    【解决方案1】:

    如果你查询这么大的数据库需要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

    【讨论】:

    • 这似乎是一个聪明的解决方法,非常感谢,我一定会试一试!
    【解决方案2】:

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

    谢谢

    【讨论】:

    • 这似乎也很有用。谢谢!
    【解决方案3】:

    你也可以使用:

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

    查看link了解更多详情。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多