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 10176 veces | 1 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos


Android Básico App para un Restaurante

USD 10.00

Descarga del código fuente

Android Básico App para un Restaurante
Android PHP MySql App Restaurant

USD 12.00

Descarga del código fuente

Android PHP MySql App Restaurant
Lector QR en Android PHP y MySql

USD 10.00

Descarga del código fuente

Lector QR en Android PHP y MySql
App Minimarket con Scanner QR

USD 200.00

Descarga del código fuente

App Minimarket con Scanner QR

Más tutoriales de Android

Codea Applications

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

© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024