24 octubre, 2018
Desarrollo de una Aplicación para sincronizar en tiempo real la Base de Datos SQLITE de la App con la Base de Datos MYSQL del Servidor Web con JSON
Suscríbete a nuestro canal en Youtube
SuscríbirseLas aplicaciones móviles para ofrecer una mejor experiencia de usuario, deben mostrar o enlazar información en tiempo real, fresca como imágenes, video y textos. Para conseguir esa funcionalidad es necesario crear un servicio web para realizar peticiones desde el aplicativo y nos retorne la información necesaria.
Es el consumo de información con un formato entendible entre las dos partes el que la tiene y el que la pide, es bidireccional se alimentan reciprocamente con nuevos datos.
Es el proceso de intercambiar información para actualizar datos
Creamos un nuevo proyecto en Android Studio, tomando como muestra Drawer Layers, iremos mostrando las secciones principales:
En el Archivo Gradle implementamos las siguiente libreria
compile 'com.loopj.android:android-async-http:1.4.9'
Y dentro de la primera actividad que se carga, debemos crear un función la cual va a sincronizar, es decir se va a comunicar con el servidor con PHP, cabe señalar que debe crearse un manejador SQLITE para realizar la consultas para insertar los datos JSON extraidos del Servidor Web
LLamada a la función en la Activity o Fragment:
sincronizar();
Llamada al manejador de SLQITE donde se ha definido la estructura de las Tablas SQLITE y las consultas.
dBmanager= new DBmanager(getApplicationContext());
El código de la función sincronizar es:
public void sincronizar(){
RequestParams params = new RequestParams();
params.put("sincronizar", "ok");
AsyncHttpClient client = new AsyncHttpClient();
client.post(Config.URL_JSON,params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
dBmanager.deleteAll();
try {
if(response.getBoolean(Config.TAG_SUCCESS)){
jsonArray = response.getJSONArray("listaUsuarios");
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject objeto = jsonArray.getJSONObject(i);
dBmanager.insertarUsuarios(
objeto.getInt("id"),
objeto.getString("nombre"),
objeto.getString("email"),
objeto.getString("nivel"),
objeto.getString("urlfoto"),
objeto.getInt("idcategoria"),
objeto.getInt("idciudad"),
objeto.getString("direccion"),
objeto.getString("telefono"),
objeto.getString("link"),
objeto.getString("descripcion"),
objeto.getString("updated_at"),
objeto.getString("created_at"),
objeto.getBoolean("disponible"),
objeto.getBoolean("estado")
);
Log.e(Config.TAG_MENSAJE, "Usuarios completo ");
} catch (JSONException e) {
Log.e(Config.TAG_MENSAJE, "usuarios " + e.getMessage());
}
}
jsonArray = response.getJSONArray("listaCategorias");
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject objeto = jsonArray.getJSONObject(i);
dBmanager.insertarCategorias(
objeto.getInt("id"),
objeto.getString("nombre"),
objeto.getString("urlfoto")
);
Log.e(Config.TAG_MENSAJE, "Categorias completo ");
} catch (JSONException e) {
Log.e(Config.TAG_MENSAJE, "Categorias " + e.getMessage());
}
}
jsonArray = response.getJSONArray("listaCiudades");
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject objeto = jsonArray.getJSONObject(i);
dBmanager.insertarCiudades(
objeto.getInt("id"),
objeto.getString("nombre")
);
Log.e(Config.TAG_MENSAJE, "Ciudades completo ");
} catch (JSONException e) {
Log.e(Config.TAG_MENSAJE, "Ciudades " + e.getMessage());
}
}
Log.d(Config.TAG_MENSAJE,response.getString("message"));
}else{
Log.d(Config.TAG_MENSAJE,response.getString("message"));
}
}catch (JSONException e){
Log.d(Config.TAG_MENSAJE,"Error de lectura JSON");
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
if (statusCode == 404) {
Config.mensaje(getApplicationContext(), "Vuelva a intentarlo");
}
// When Http response code is '500'
else if (statusCode == 500) {
Config.mensaje(getApplicationContext(), "Servidor en mantenimiento");
}
// When Http response code other than 404, 500
else {
Config.mensaje(getApplicationContext(), "Se ha perdido la conexión con internet");
}
}
});
}
Existe un archivo JAVA que lleva el nombre de Config y que contiene funciones static reusables, constantes, etc... la cual mostramos a continuacion:
Config.java
public class Config {
public static final String URL_JSON = "http://192.118.0.3/apptivaweb.com/admin/app/json/json.php";
public static final String URL_LOGIN = "http://192.118.0.3/apptivaweb.com/admin/app/json/login.php";
public static String TAG_MENSAJE ="message";
public static String TAG_SUCCESS ="success";
public static void mensaje(Context context, String mensaje){
Toast.makeText(context, mensaje, Toast.LENGTH_LONG).show();
}
}
El detalle de la IP es que se esta trabajando con un servidor local XAMPP para ser exacto, la forma de averiguar la IP es levantado CMD en Windows y digitando el comando ipconfig
Ahora por último tenemos la conexión PHP que recibe la petición y la procesa para retornar los datos en JSON
Veamos el códigop PHP:
<?php
$response=array();
if(isset($_POST["sincronizar"])):
require("../../app/class.mysql.php");
$user=new Usuario();
$u=$user->search("usuarios","1");
if ($u->rowCount()>0):
$response["listaUsuarios"] =array();
while ($data=$u->fetchObject()):
$item=array();
$item["id"] = $data->id;
$item["nombre"] = $data->nombre;
$item["email"] = $data->email;
$item["nivel"] = $data->nivel;
$item["urlfoto"] = $data->urlfoto;
$item["idcategoria"] = $data->idcategoria;
$item["idciudad"] = $data->idciudad;
$item["direccion"] = $data->direccion;
$item["telefono"] = $data->telefono;
$item["link"] = $data->link;
$item["descripcion"] = $data->descripcion;
$item["updated_at"] = $data->updated_at;
$item["created_at"] = $data->created_at;
$item["disponible"] = ($data->disponible)? true : false;
$item["estado"] = ($data->estado)? true : false;
array_push($response["listaUsuarios"],$item);
endwhile;
endif;
$u=$user->search("categorias","1");
if ($u->rowCount()>0):
$response["listaCategorias"] =array();
while ($data=$u->fetchObject()):
$item=array();
$item['id'] = $data->id;
$item["nombre"] = $data->nombre;
$item["urlfoto"] = $data->urlfoto;
array_push($response["listaCategorias"],$item);
endwhile;
endif;
$u=$user->search("ciudades","1");
if ($u->rowCount()>0):
$response["listaCiudades"] =array();
while ($data=$u->fetchObject()):
$item=array();
$item['id'] = $data->id;
$item["nombre"] = $data->nombre;
array_push($response["listaCiudades"],$item);
endwhile;
endif;
$user=null;
$response["success"] = true;
$response["message"] = "Sincronización completa";
else:
$response["success"] = false;
$response["message"] = "Error, posiblemente no hay conexión";
endif;
die(json_encode($response));
?>
Vemos claramente que se esta retornando la información de tres tablas usuarios, categorias, ciudades sin restricción alguna, esas funcionalidades adiciones podriamos programarlas en esta sección...
Fin.
Leido 10176 veces | 1 usuarios
Código fuente no disponible.
© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024