Android – La mejor manera de sincronizar SQLite con MySQL
Estoy trabajando en un proyecto que contiene aplicaciones web y aplicaciones móviles que registran los datos de los usuarios diarios. El usuario puede eliminar, actualizar sus datos y puede utilizar muchos dispositivos para insertar datos.
Tengo la intención de desarrollar de esta manera:
El usuario introduce sus datos e inserta a SQLite. Un servicio se iniciará periódicamente (cada 5hr o algo) para sincronizar con MySQL usando timestamp.
Hice la búsqueda de una muestra utilizando el servicio y timestamp en Internet, pero no encontré nada. Sería genial si hay una muestra o tutorial.
Soy nuevo en Android y no tengo ni idea de cuál es la mejor manera de desarrollar una aplicación como esta. Gracias por adelantado.
—-EDITAR—-
Considero el uso de timestamp o sincronizado. ¿Cuál es más eficaz?
- Duplicar la base de datos Android de otra aplicación?
- Insertar valores en la base de datos SQLite manualmente
- ¿Hay buenos ORMs (preferiblemente implementaciones JPA) que soportan SQLite (en Android)?
- ¿Por qué fue InsertHelper obsoleta?
- Android: La ventana del cursor está llena
- Cómo utilizar SQLiteDatabase.CursorFactory
- IllegalArgumentException: columna no válida
- Obtener la distancia más corta desde un punto
- Error log sqlite no se ha podido cargar desde /cachedGeplacement.db
- ¿Es necesario cerrar una base de datos abierta con window.openDatabase?
- Sincronizar base de datos Android sqlite
- Cómo organizar mejor mi clase de base de datos SQLite en Android
- Intenta invocar el método virtual 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query en la referencia de objeto nulo
Usted podría utilizar la biblioteca volley
por google o cualquier otra libraries
, depende de cómo desea enviar los datos, el mejor enfoque es que utiliza JSON
para hacer su vida más fácil, obtener los datos de sqlite que te gusta sincronizar con su backend Y enviarlo a través de JsonObjectRequest
utilizando volley, por ejemplo, su solicitud puede verse así
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. });
U podría agregar un nuevo valor que indica si el valor se ha sincronizado o no desde su base de datos local. Por ejemplo, digamos que tienes una tabla llamada student y esta tabla tiene tres columnas que son ID, NAME y sincronizadas en código anterior cuando tu respuesta devuelve éxito actualiza esa columna de fila sincronizada con true | false que indica si esta fila se sincroniza con tu backend o no. Y para obtener los datos de su base de datos debe hacer algo como esto.
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); }
La manera esieast AFAIK es usar un lib como http://loopj.com/android-async-http/ o volley lije k0sh dice enviar datos a un script PHP que te administrará datos mysql. Tendrás que escribir un script php (o java) en tu servidor para recibir tus datos (deberías escribir una API REST)
Para seleccionar su HTTP lib, debe buscar aquí:
¿Cuál es la biblioteca HTTP más robusta para Android?
Realmente debe preocuparse por cómo va a sincronizar sus datos, ya que podría drenar su batería. Aquí aprenderá cómo optimizar sus actualizaciones:
https://developer.android.com/training/efficient-downloads/index.html
¡Espero eso ayude!
- ¿Pueden DIFFERENT IntentServices ejecutarse en paralelo?
- Coloque varios parámetros en ContentResolver.requestSync