2014-11-03 10 views
4

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

---- EDIT ----
Я считаю использование временной метки или синхронизации. Что более эффективно?

ответ

3

можно использовать 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. 
    }); 

у может добавить новое значение, которое указывает, имеет ли значение было синхронизации или нет из локальной базы данных. например, скажем, у вас есть таблица со студентом, и в этой таблице есть три столбца, которые являются 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); 
    } 
+2

Вы должны заменить st.setName (cursor.getString (1)); by cursor.getString (cursor.getColumnIndex (NAME)), где NAME - это имя столбца Sqlite. –

+0

Должен ли я использовать временную метку или синхронизировать? Какая из них лучше? – Foo

+0

@JuliatzindelToro правильно, спасибо за хэдсп. – k0sh

4

esieast путь AFAIK является использование LIB как http://loopj.com/android-async-http/ или залпового lije k0sh говорит, чтобы отправить данные в PHP скрипт, который будет управлять вами MySQL данные. Вы должны написать PHP (или Java) скрипт на сервере, чтобы получить данные (Вы должны написать REST API)

Чтобы выбрать HTTP LIB, вы должны посмотреть здесь:

What is the most robust HTTP library for android?

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

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

Надеется, что это помогает!

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