2013-05-01 1 views
2

У меня есть AsyncTask, который извлекает информацию из веб-службы и отображает ее в пользовательском интерфейсе. Это требует, чтобы я получал информацию каждый раз, когда приложение запускается, что тратит полосу пропускания и требует, чтобы информация появлялась при запуске приложения.Как использовать базу данных SQLite для хранения данных синхронизации из безопасности веб-потоков

Я хотел бы сохранить извлеченную информацию в локальной базе данных SQLite и периодически ее синхронизировать с данными веб-службы.

Что было бы лучшим подходом к этому?

Если я создаю еще одну AsyncTask для базы данных и запустил ее, как только приложение запустится, я рискую иметь состояние гонки, когда база данных обновляется, когда я читаю информацию с нее, чтобы отобразить ее в пользовательском интерфейсе. Что рекомендуется для этого? Я предполагаю, что это общая проблема, хотя я не был в состоянии найти правильные ключевые слова, чтобы найти ответ ...

Благодаря

Edit: Мой мин уровень API составляет 8, так что любое решение должно работать с ним или доступны в библиотеке поддержки.

ответ

2

Если вы хотите кэшировать данные локально в SQLite базы данных, рассмотреть вопрос о создании Content Provider, которая обеспечивает обертку вокруг базы данных SQLite, а также позволяет использовать Loaders, которые могут извлекать информацию из базы данных и автоматическое обновление пользовательского интерфейса, как основные изменения данных.

+0

Спасибо, я читал об этом и посмотреть. Я заметил, что загрузчики предназначены только для новых уровней API, а мой минимальный уровень API - 8. Итак, как мне синхронизировать графический интерфейс с БД на более старых уровнях API? – tbkn23

+0

@tbkn - Погрузчики также находятся в Библиотеке поддержки и доступны обратно к уровню API 4: http://developer.android.com/tools/extras/support-library.html – ianhanniballake

0

Я обескуражил вас использовать AsyncTask для выполнения любых сетевых вызовов. Как вы упомянули, AsyncTask создается снова, когда активность снова запущена, в том числе при простое изменение ориентации вашего устройства. Погрузчики лучше, но они не были созданы для выполнения запросов, так как, несмотря на то, что загрузчик не создается снова, когда ваша активность возобновляется, загрузчик будет возобновлен, но перезапустит его с нуля.

Наилучшим подходом является использование API Service, как упоминалось в GoogleIO 2010. Так как вы хотите, чтобы выполнить некоторые данные с постоянство локальной базы данных с удаленного сервера, я предлагаю вам использовать RESTDroid

+0

Да, AsyncTask было временным решением, которое я использовал, Я не намерен продолжать использовать его (возможно, только для ручной синхронизации по запросу). Я опубликовал другой вопрос, немного другой после дополнительных исследований. Посмотрите, можете ли вы помочь там: http://stackoverflow.com/questions/16433709/syncing-a-rest-service-with-an-android-app?noredirect1_comment23570228_16433709 – tbkn23

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

  • Нет связанных вопросов^_^