之前我使用过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
进行任何操作?
答案 0 :(得分:4)
所以,如果我已经通过doInBackground管理辅助线程中的数据了,我还需要SQLiteCursorLoader进行任何操作吗?
可能不是。 Loader
的要点是异步加载数据。如果您自己这样做,Loader
将不会以某种方式使更多异步。 : - )
请记住,如果您更改了数据,则需要运行新的AsyncTask
来更新您的用户界面以反映更改的数据,例如检索新的Cursor
。 CursorLoader
会自动执行此操作;如果你通过加载器本身运行数据库操作,SQLiteCursorLoader
只能“自动”执行。
答案 1 :(得分:1)
使用CursorLoader
接口的目的是让您不在主应用程序线程上执行数据库操作(可能会影响应用程序的响应能力)。 SQLiteCursorLoader
提供了与旧SimpleCursorAdapter
类似的界面,但将在AsyncTask
中执行数据库操作。
SQLiteCursorAdapter
的GitHup页面包含更多信息/背景:https://github.com/commonsguy/cwac-loaderex