2013-03-06 4 views
1

Я разрабатываю приложение, которое синхронизирует различные данные через JSON практически в каждом мероприятии. Этим данным можно манипулировать другими устройствами, поэтому я должен постоянно обновлять их, когда это возможно.Синхронизация данных в Android-приложении

Например, в первой деятельности я войти на веб-сервис, и в следующей деятельности я использую AsyncTask загрузить JSON, который говорит мне все модели автомобилей в магазине, и использовать эту информацию для создания ListView. Нажав на одну строку, я вызываю другую AsyncTask, чтобы загрузить определенную информацию (JSON) об этом автомобиле и получить, например, информацию о ее шинах. В следующем действии я звоню другому AsyncTask, чтобы получить конкретную информацию об этих шинах. В большинстве случаев требуемая информация, которая будет использоваться в следующем Управлении, сохраняется в SharedPreferences, потому что я понятия не имею, как иметь доступ к ArrayLists во всем приложении, и я не знаю, будет ли он использовать много оперативной памяти. И если это хорошая идея, чтобы поделиться таким количеством объектов через приложение.

Вы можете видеть, что каждый раз, когда моя активность перезагружается, AsyncTask проверяет соединение и загружает новые данные для отображения. Служба не поддерживает push, поэтому я предполагаю, что я обязан проверять ее каждый раз, правильно?

Еще одна вещь, которую следует учитывать, - это то, что загружаемые данные могут быть изменены, и в этом случае я должен загрузить JSON и соответственно обновить представления. В этом аспекте я понятия не имею, как сохранить «изменения», которые будут загружены при отключении соединения. Например, создавая список несинхронизированных задач в очереди.

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

Для большей части я создаю новый объект ArrayList (Car, Tyres и т. Д.), Но я смущен, как правильно синхронизировать данные в JSON, если все теперь является объектом. Может быть, использовать GJON?

Мне действительно нужны некоторые советы о том, как управлять такими приложениями.

Thanks

+0

Не используйте 'AsyncTask' для связи с вашим веб-сервисом. См. Беседу Google IO о разработке клиентских приложений REST (http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html) и библиотеке Robospice (https: // github .com/octo-online/robospice) для реализации, основанной на этом разговоре. –

+0

@TylerTreat Большое спасибо, я собираюсь посмотреть эту сессию сейчас! Надеюсь, это дает мне немного света. Хотя я обычно боюсь использовать сторонние библиотеки и иметь много зависимостей в своем проекте. – 2013-03-06 03:49:11

+0

@TylerTreat thanks Tyler Я также смотрю это сейчас – wired00

ответ

1

Только мои мысли быстро. поскольку у меня есть 2 очень похожих приложения ... т. е. довольно тесно связаны с онлайн-сервисом/базой данных.

Вам действительно нужна локальная база данных с использованием sqlite.

Вот пример того, как я предлагаю вам обрабатывать каждый вид деятельности, который в настоящее время загрузки данных с сервера на дисплее:

1) То, что вы можете сделать, это каждый раз, когда экран нагрузки, такие как «ListCarsActivity», когда onResume() вам нужно сначала позвонить в местную БД, получить последние данные, затем отобразить эти результаты на экране, в вашем ListView и т. Д. Это даст более быструю обратную связь с пользователем.

2) После этого, в onResume() вам нужно вызвать объект WebService сказать WSGetCars, который будет зарезки на Async задачу А) подключиться к серверу, загрузить JSON/XML, синтаксический анализ данных и обновление базы данных (либо добавить или обновить и т. д.) B) через вспомогательный объект с доступом к действию повторно запустить вызов базы данных, чтобы обновить список новыми данными.

короче:

  1. экрана загрузки, и заполнить список с локальным списком БЫСТРО баз данных автомобилей
  2. немедленно и асинхронно загружать обновленные данные автомобиля и синхронизировать локальную БД
  3. список обновления автомобиля.

Вы можете использовать этот принцип во всем своем приложении.

ли вы используете мое предложение объекта веб-службы, зависит от вас. Но я, как правило, активность которых называют WS объект для загрузки, который затем использует XML синтаксического анализ объект и т.д. и т.п.

Надеется, что это помогает на концептуальный уровне

ПРИМЕЧАНИЯ: вы также требуете простого IF заявление вокруг каждый вызов WS/Async, поэтому приложение не пытается подключиться к серверу, если у вас нет подключения к Интернету. Разрешить показ вашего приложения по-прежнему работать, когда «офлайн» (будь то, возможно, с устаревшими данными).

Что касается экрана входа в систему: вы можете использовать SharedPreferences, чтобы проверить, если они уже вошли в систему каждый раз, когда onResume() загружается, если вы вошли в систему, а затем автоматически загружаете внутреннюю страницу системы. Мое приложение НЕ разрешит вход в систему без подключения к Интернету. Таким образом, это позволяет приложению работать, если в последнем состоянии они уже вошли в систему.

+0

Спасибо, что поделились этим! Ваше предложение прояснилось и дало мне идеи работать и совершенствоваться, и это могло бы быть идеальным, если бы оно было суммировано с библиотекой сессий/сторонних разработчиков, рекомендованной выше компанией @TylerTreat. – 2013-03-06 03:52:48

+0

@ пользователь2129147 без проблем. Я в основном дал вам представление о том, что нужно сделать, но, как предлагает Тайлер. вы можете использовать принципы RESTFul, чтобы синхронизировать данные локальной базы данных. Это как альтернатива тому, что я сейчас делаю, когда у меня есть задача Async загружать XML и обновлять базу данных. Но я думаю, что цель та же самая ... т. Е. Обновленная база данных, из которой вы извлекаете данные непосредственно из INSTEAD, заставляя пользователя ждать HTTP-соединений для загрузки JSON. надеюсь, что имеет смысл – wired00

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