асинхронное программирование между android и mysql [duplicate]

Используя файл дампа 200 Мбайт, созданный в Linux для восстановления в Windows w / mysql 5.5, я имел больший успех с помощью метода

source file.sql

из приглашения mysql, чем с

mysql  < file.sql

в командной строке, что вызвало некоторый Ошибка 2006 «сервер ушел» (на окнах)

Как ни странно, служба, созданная во время (mysql) install, ссылается на файл my.ini, который не существует. Я скопировал «большой» пример файла в my.ini, который я уже модифицировал с рекомендуемым увеличением.

Мои значения:

[mysqld]
max_allowed_packet = 64M
interactive_timeout = 250
wait_timeout = 250
228
задан jaysoifer 21 May 2016 в 12:49
поделиться

8 ответов

Я постараюсь ответить на все ваши вопросы, обратившись к большему вопросу: Как синхронизировать данные между веб-сервером и приложением Android?


Синхронизация данных

Постоянное хранилище:

Так ваш телефон фактически хранит данные, полученные с веб-сервера. Одним из возможных способов достижения этого является создание собственного пользовательского ContentProvider , поддерживаемого базой данных Sqlite. Порядочный учебник для поставщика контента можно найти здесь: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

A ContentProvider определяет согласованный интерфейс для взаимодействия с вашими сохраненными данными. Это может также позволить другим приложениям взаимодействовать с вашими данными, если вы хотите. За вашим ContentProvider может быть база данных Sqlite, кэш или любой произвольный механизм хранения.

Хотя я бы, конечно, рекомендовал использовать ContentProvider с помощью Sqlite

Формат обмена данными:

Это формат, который вы используете для отправки данных между вашим веб-сервером и вашим Android-приложением. Двумя самыми популярными форматами в наши дни являются XML и JSON. При выборе формата вы должны подумать о том, какие библиотеки сериализации доступны. Я знаю, что есть фантастическая библиотека для сериализации json под названием gson: https://github.com/google/gson , хотя я уверен, что подобные библиотеки существуют для XML.

Служба синхронизации

Вам понадобится какая-то асинхронная задача, которая может получать новые данные с вашего сервера и обновлять мобильный контент, чтобы отражать содержимое сервера. Вы также захотите уведомить об этом сервер при внесении локальных изменений в контент и хотите отразить эти изменения. Android предоставляет шаблон SyncAdapter как способ легко решить этот шаблон. Вам нужно будет зарегистрировать учетные записи пользователей, а затем Android выполнит много волшебства для вас и позволит вам автоматически синхронизировать. Вот хороший учебник: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/


Что касается того, как вы определяете, совпадают ли записи, обычно вы создадите элементы с уникальным идентификатором, который вы храните как на устройстве Android, так и на сервере. Вы можете использовать это, чтобы убедиться, что вы ссылаетесь на одну и ту же ссылку. Кроме того, вы можете хранить атрибуты столбцов, такие как «updated_at», чтобы убедиться, что вы всегда получаете самые свежие данные или вы случайно не записываете новые записанные данные.

289
ответ дан Cœur 27 August 2018 в 16:07
поделиться

@Grantismo дает отличное объяснение в целом. Если вы хотите знать, кто на самом деле делает это, я предлагаю вам взглянуть на то, как Google сделал для приложения IO Google 2014 (всегда стоит внимательно изучить исходный код этих приложений, которые они выпускают. много, чтобы узнать оттуда).

Вот сообщение в блоге об этом: http://android-developers.blogspot.com.br/2014/09/conference-data-sync-gcm -google-io.html

По сути, со стороны приложения: GCM для сигнализации, адаптера синхронизации для сбора данных и правильной работы с поставщиком контента, который сделает вещи постоянными (да, он изолирует DB из прямого доступа из других частей приложения).

Кроме того, если вы хотите взглянуть на код 2015 года: https://github.com/google/iosched

12
ответ дан Ciro Costa 27 August 2018 в 16:07
поделиться

Если вы сами это напишете, это некоторые из соображений, которые следует иметь в виду

Надлежащая проверка подлинности между устройством и сервером синхронизации

Протокол синхронизации между устройством и сервером , Обычно это происходит в 3 этапа, проверка подлинности, обмен данными, обмен состояниями (какие операции выполнялись и которые не выполнялись)

Выберите формат вашей полезной нагрузки. Я предлагаю XML на основе SyncML, смешанный с форматом JSON, для представления фактических данных. Итак, SyncML для протокола и JSON для обмена фактическими данными. Использование JSON Array при управлении данными всегда предпочтительнее, так как легко получить доступ к данным с помощью JSON Array.

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

Необходимо иметь способ связи с сервером на устройстве, чтобы начать сеанс синхронизации как изменения данных на сервере. Вы можете использовать C2DM или написать собственную постоянную связь на основе tcp. Подход tcp очень много

Способ репликации данных на разных устройствах

И последнее, но не менее важное: способ обнаружения и обработки конфликтов

Надеюсь, это поможет в качестве хорошей отправной точки.

21
ответ дан Community 27 August 2018 в 16:07
поделиться

Посмотрите parseplatform.org . это проект с открытым исходным кодом.

(а также вы можете найти коммерческий пакет, доступный на back4app.com .)

Это очень прямой и удобный пользователь дружественная служба базы данных на стороне сервера, которая предоставляет отличный API-интерфейс для сторонних разработчиков Android

5
ответ дан Manifest 27 August 2018 в 16:07
поделиться

одним из способов добиться этого, чтобы иметь приложение на стороне сервера, которое ждет данных. Данные могут быть отправлены с использованием объектов HttpRequest в Java или вы можете написать свою собственную утилиту передачи данных TCP/IP. Данные могут быть отправлены с использованием формата JSON или любого другого формата, который, по вашему мнению, подходит. Также данные могут быть зашифрованы перед отправкой на сервер, если они содержат конфиденциальную информацию. Все серверное приложение должно просто ждать, пока HttpRequests войдет и проанализирует данные и сохранит их в любом месте.

3
ответ дан Mayank 27 August 2018 в 16:07
поделиться

Я бы предложил использовать бинарный протокол webservice, аналогичный Hessian . Он работает очень хорошо, и у них есть реализация android. Это может быть немного тяжело, но зависит от приложения, которое вы строите. Надеюсь, это поможет.

1
ответ дан Neo 27 August 2018 в 16:07
поделиться

Например, вы хотите синхронизировать таблицу todoTable с MySql до Sqlite

. Сначала создайте одно имя столбца version (type INT) в todoTable для обоих Sqlite и MySql

Во-вторых, создайте имя таблицы database_version с одним именем столбца currentVersion(INT)

В MySql когда вы добавляете новый элемент в todoTable или элемент обновления, вы должны обновить версию этого элемента на +1, а также обновить currentVersion

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

Вы отправите запрос с помощью Sqlite currentVersion (в настоящее время это 1) на сервер. Затем на сервере вы обнаружите, какой элемент в MySql имеет значение версии больше, чем Sqlite currentVersion (1), а затем ответ на Android (в этом примере элемент 3 с версией 2 будет отвечать на Android)

В SQLite вы добавите или обновите новый элемент до todoTable и обновите currentVersion

5
ответ дан Phan Van Linh 27 August 2018 в 16:07
поделиться

@Grantismo дает отличный обзор компонентов синхронизации Android.

Библиотека SyncManagerAndroid обеспечивает простую двухстороннюю синхронизацию для подключения к платформе Android Sync (AbstractThreadedSyncAdapter.OnPerformSync).

https://github.com/sschendel/SyncManagerAndroid

1
ответ дан Sean 27 August 2018 в 16:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: