Вопрос:

Android - лучший способ синхронизировать SQLite с MySQL

android mysql sqlite sync

28646 просмотра

2 ответа

89 Репутация автора

Я работаю над проектом, содержащим веб-приложение и мобильное приложение, которое ежедневно записывает данные пользователя. Пользователи могут удалять, обновлять свои данные, и они могут использовать множество устройств для вставки данных.
Я намерен разработать этот способ:
пользователь вводит свои данные, а затем вставляет в SQLite. Служба будет запускаться периодически (каждые 5 часов или час) для синхронизации с MySQL с использованием отметки времени.
Я искал образец с использованием сервиса и метки времени в интернете, но ничего не нашел. Было бы здорово, если бы есть образец или учебник.
Я новичок в Android, и я понятия не имею, как лучше всего разработать такое приложение. Заранее спасибо.

---- РЕДАКТИРОВАТЬ ----
Я считаю, использовать метку времени или синхронизированы. Что является более эффективным?

Автор: Foo Источник Размещён: 03.11.2014 01:24

Ответы (2)


7 плюса

4783 Репутация автора

Решение

вы можете использовать volleyбиблиотеку через Google или любую другую альтернативу libraries, это зависит от того, как вы хотите отправлять данные, наилучший подход заключается в том, что вы используете его, JSONчтобы упростить свою жизнь, получить данные из sqlite, которые вы хотите синхронизировать со своей серверной частью, и отправить их над JsonObjectRequestиспользованием залпа, например , ваш запрос может выглядеть следующим образом

jsonObjectRequest postForm = new JsonObjectRequest(Request.Method.POST, URL, YourJsonData, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
         // here you can get your response.
        },new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
    // here you can tell there is something went wrong.
    });

Вы можете добавить новое значение, которое указывает, было ли значение синхронизировано или нет из вашей локальной базы данных. например, предположим, что у вас есть таблица с именем student, и в этой таблице три столбца: ID, NAME и синхронизированы в приведенном выше коде, когда ваш ответ вернет успех, обновите этот столбец с синхронизированной строкой со значением true | false, которое указывает, синхронизирована ли эта строка с вашей серверной частью или нет и чтобы получить данные из вашей базы данных, вы должны сделать что-то вроде этого.

public String getStudents() {
        List<Student> students = new ArrayList<Student>();
        String query = "SELECT  * FROM " + STUDENT+ "where synced=0";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);
        if (cursor.moveToFirst()) {
            do {
                Student st = new Student();
                st.setId(cursor.getString(cursor.getColumnIndex(ID)));
                st.setName(cursor.getString(cursor.getColumnIndex(NAME)));
                st.setSynced(cursor.getInt(cursor.getColumnIndex(SYNCED)));
                students.add(st);
            } while (cursor.moveToNext());
        }
        db.close();
        return new Gson().toJson(students);
    }
Автор: k0sh Размещён: 03.11.2014 01:48

5 плюса

5962 Репутация автора

Самый простой способ AFAIK - использовать библиотеку, например http://loopj.com/android-async-http/ или volley lije k0sh, для отправки данных в сценарий PHP, который будет управлять данными MySQL. Вам нужно написать php (или java) скрипт на вашем сервере для получения ваших данных (вы должны написать REST API)

Чтобы выбрать свою HTTP-библиотеку, вы должны посмотреть здесь:

Какая библиотека HTTP является наиболее надежной для Android?

Вы должны действительно заботиться о том, как вы собираетесь синхронизировать свои данные, потому что это может разрядить аккумулятор. Здесь вы узнаете, как оптимизировать ваши обновления:

https://developer.android.com/training/efficient-downloads/index.html

Надеюсь, это поможет!

Автор: Juliatzin del Toro Размещён: 03.11.2014 01:52
Вопросы из категории :
32x32