2

Я работаю над клиентским Android-приложением, которое будет извлекать данные из URL-адреса и сохранять их в локальной базе данных. Я ознакомлен с использованием SQLiteDatabase для этой операции.База данных SQLite и CursorLoaders

Моя забота началась, когда я читал около SimpleCursorAdapter, чтобы отображать строки таблиц в списке. Вот когда я прочитал около CursorLoader для асинхронного управления курсором.

Дело в том, что, читая об этом, они говорят о ContentProvider, и, насколько я знаю, этот класс используется для обмена данными между приложениями, поэтому я смутился.

Можете ли вы провести меня через это, я не знаю, нужно ли мне использовать CursorLoader, потому что я не знаю, для чего это необходимо, и что это имеет отношение к ContentProvider и обмена данными между приложениями.

EDIT: Чтение демонстрационного приложения нашло здесь https://github.com/commonsguy/cwac-loaderex/blob/master/demo/src/com/commonsware/cwac/loaderex/demo/ConstantsBrowser.java

Похоже, что для получения данных это делается в строке 122: onCreateLoader

public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) { 
    loader = new SQLiteCursorLoader(this, db, "SELECT _ID, title, value " 
     + "FROM constants ORDER BY title", null); 

    return(loader); 
} 

делает это означает, что я больше не могу использовать SQLiteDatabase # запрос()? например, db.query (таблица, столбцы, выбор, selectionArgs, groupBy, имеющая, orderBy);

+0

Вам удалось решить эту проблему? –

ответ

0

ContentProviders были разработаны с целью обмена данными между приложениями, но они предлагают большие преимущества для доступа к базе данных SQLite (простой API, интеграция ContentResolver и SyncAdapter и т. Д.).

Этот разговор поможет вам понять преимущества использования ContentProvider добиться того, что вы хотите:

http://www.youtube.com/watch?v=xHXn3Kg2IQE

Как вы знаете, вы не должны выполнять запросы к базе данных (и I/O операции вообще) в потоке пользовательского интерфейса. Поэтому CursorLoader может получить доступ к базе данных для вас в фоновом потоке и доставить результат Cursor в потоке пользовательского интерфейса. CursorLoader использует интерфейс ContentResolver для доступа к вашей реализации ContentProvider, которая выполнит ваш запрос и вернет курсор.

+0

, но использование ContentProvider - это альтернатива использованию базы данных SQLite или что-то еще? –

+0

Нет! Это простой интерфейс для операций CRUD. Вы должны реализовать собственный ContentProvider, который напрямую обращается к вашей базе данных. –

+0

На самом деле, я просто прочитал http://developer.android.com/guide/topics/providers/content-provider-creating.html#BeforeYouStart, и мне, похоже, не нужен контент-провайдер, я должен использовать его в любом случае ? и если да, то почему? –

Смежные вопросы