SQLite和SQLiteCursorLoader库

时间:2014-02-17 22:34:23

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

之前我使用过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进行任何操作?

2 个答案:

答案 0 :(得分:4)

  

所以,如果我已经通过doInBackground管理辅助线程中的数据了,我还需要SQLiteCursorLoader进行任何操作吗?

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

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

答案 1 :(得分:1)

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

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