Библиотека 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

Другие вопросы по тегам