Библиотека SQLite и SQLiteCursorLoader
Я использовал Android SQLite
раньше, но я всегда управлял строками данных вручную, поэтому никогда не использовал такие классы, как SimpleCursorAdapter
, Я хочу начать использовать их сейчас, но мне нужно немного помочь в реализации кода, так как он говорит, что я должен использовать CursorLoader
, Я решил, что я использую SQLiteCursorLoader
библиотека.
Вот подробности:
У меня есть стол students
в базе данных SQLite. Также, 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 ответа
Итак, если я уже управляю данными во вторичном потоке благодаря doInBackground, нужен ли мне еще SQLiteCursorLoader для какой-либо операции?
Возможно нет. Точка Loader
это загрузить данные асинхронно. Если вы делаете это самостоятельно, Loader
как-то не сделает его более асинхронным.:-)
Просто помните, что если вы измените свои данные, вам нужно будет запустить новый AsyncTask
обновить ваш пользовательский интерфейс, чтобы отразить измененные данные, например, путем получения свежей Cursor
, CursorLoader
делает это автоматически; SQLiteCursorLoader
делает это "автоматически" только если вы запускаете операцию с базой данных через сам загрузчик.
Цель использования CursorLoader
Интерфейс таков, что вы не выполняете операции с базой данных в основном потоке приложения (что может повлиять на скорость отклика вашего приложения). SQLiteCursorLoader
обеспечивает интерфейс, который похож на старый SimpleCursorAdapter
, но будет выполнять операции с базой данных в AsyncTask
,
Страница GitHup для SQLiteCursorAdapter
имеет больше информации / фона: https://github.com/commonsguy/cwac-loaderex