Inicio » Blog » Android

24 octubre, 2018

Sincronizar un app con Web Services

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íbirse

Las 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.

QUE ES UN SERVICIO WEB

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.

QUE SE ENTIENDE POR SINCRONIZACIÓN

Es el proceso de intercambiar  información para actualizar datos 

DESARROLLO DEL APLICATIVO ANDROID

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 9586 veces

Compartir link del tutorial con tus amigos


Android Básico App Restaurante Android Básico App Restaurante

Curso Android Básico para desarrollar una app para un restaurante.

Descarga del código fuente

USD 10.00

Android PHP MySql App Restaurant Android PHP MySql App Restaurant

Curso Android, PHP y MySql App Restaurant con Pedidos Delivery

Descarga del código fuente

USD 12.00

Android PHP MySql Lector QR Android PHP MySql Lector QR

Curso Lector QR en Android con servicios web en PHP y MySql

Descarga del código fuente

USD 10.00

App Minimarket con Scanner QR App Minimarket con Scanner QR

Curso App Minimarket con Lector QR en Android, Flutter y Laravel

Descarga del código fuente

USD 200.00

Aprende más sobre Android

Cursos de programación

Codea Codea App

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú

© Todos los derechos reservados Codea App | ...de frente al código!!! | 2020 - 2023