【问题标题】:SQLite and SQLiteCursorLoader LibrarySQLite 和 SQLiteCursorLoader 库
【发布时间】:2014-03-17 10:21:58
【问题描述】:

我之前用过Android的SQLite,但我一直都是手动管理数据行,所以我从来没有用过SimpleCursorAdapter这样的类。我现在想开始使用它们,但在代码实现方面我需要一点帮助,因为它说我必须使用CursorLoader。我决定使用SQLiteCursorLoader 库。

以下是详细信息:

我在 SQLite 数据库中有一个名为 students 的表。此外,Student 模型类和StudentManager 控制器类。调用 StudentManager#getAll() 返回一个包含所有学生的 Cursor

让我们转到Fragment。我使用ListFragment 来实现多功能性。无论如何,直到现在我在onCreate里面有以下内容:

studentCursor = studentManager.getAll();
String[] from = new String[] { EventManager.COLUMN_TITLE };
String[] to = new String[] { R.id.title };
cursorAdapter = new SimpleCursorAdapter(this, R.layout.row_events, eventCursor, from, to, 0);

然后,我将有一个 AsyncTask 子类,它将从 RESTful API 检索数据。

@Override
public void doInBackground() {
    // code to get an array of students

    for(Student student in students) {
        studentManager.save(student);
    }
}

问题是,我将在哪一部分使用SQLiteCursorLoader 以及用于什么

编辑:问题更可能是这样的:我已经在实现自己的AsyncTask 操作,因为我正在从服务器检索和管理所有数据。所以,如果我已经通过doInBackground 在辅助线程中管理数据,我还需要SQLiteCursorLoader 进行任何操作吗?

【问题讨论】:

  • 我不知道“它”是什么,但您不必将LoaderSimpleCursorAdapter 一起使用。如果您想了解Loader 框架的内容,请参阅the documentation
  • 感谢您的快速回答,我编辑了我的帖子以获得更准确的问题。

标签: android sqlite android-cursoradapter android-cursor android-cursorloader


【解决方案1】:

那么,如果我已经通过 doInBackground 在辅助线程中管理数据,我还需要 SQLiteCursorLoader 来执行任何操作吗?

可能不会。 Loader 的要点是异步加载数据。如果您自己这样做,Loader 不会以某种方式使其更多异步。 :-)

请记住,如果您更改数据,则需要运行新的 AsyncTask 来更新您的 UI 以反映更改的数据,例如通过检索新的 CursorCursorLoader 会自动执行此操作;如果您通过加载程序本身运行数据库操作,SQLiteCursorLoader 只会“自动”执行此操作。

【讨论】:

  • 好的,这是一个非常完整的答案,我一直在寻找这个信息大约 3 个小时。非常感谢。我主要从我的应用程序中执行 SELECT 操作,并且由于它们必须在服务器端进行验证,所以我总是会在辅助线程中工作。编辑:另外,“如果你自己这样做,加载器不会以某种方式使其更加异步。:-)”xD
  • 您说我需要检索新光标的部分是指为适配器设置新光标?
  • @ChristopherFrancisco:是的,或者您正在使用Cursor 做任何其他事情。
  • 我明白了。快速提问,SQLiteCursorLoader 是 SQLiteDatabase 的替代品吗?
  • @ChristopherFrancisco: 不,SQLiteCursorLoader 使用 SQLiteDatabase 你提供它。
【解决方案2】:

使用CursorLoader 接口的目的是让您不在主应用程序线程上执行数据库操作(可能会影响应用程序的响应能力)。 SQLiteCursorLoader 提供了一个类似于旧的SimpleCursorAdapter 的接口,但将在AsyncTask 中执行数据库操作。

SQLiteCursorAdapter 的 GitHup 页面有更多信息/背景:https://github.com/commonsguy/cwac-loaderex

【讨论】:

  • 我编辑了我的帖子以获得更准确的问题,感谢您的快速回复顺便说一句
  • 从服务器检索到的数据会发生什么?我想它会进入您的 SQLite 数据库。如果是这样,并且您想加载此数据以进行显示,那么该部分还需要在 AsyncTask 中发生,这就是 SQLiteCursorLoader 的来源。
  • 你是对的。到目前为止,我正在将数据保存到 doInBackground 中的数据库,请问可以举个例子吗?
  • 只需查看 github 页面,那里有很多示例,包括示例 Eclipse 项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2017-06-05
相关资源
最近更新 更多