Programación de una app Android para consumir servicios web

Crear un Web Service para Android con PHP MYSQL SQLITE JSON

Publicado en Android 2018-04-18 20:54:36

Programación de una app Android para consumir servicios web

Sincronizar un app con Web Services Android

Android Programación Android

Resumen: 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

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.

El resultado podemos verlo en el siguiente video corto de menos de 03 minutos

Redacción:| Artículo leído: 343 veces | Publicación:


Compártelo con tus amigos


Publicaciones relacionadas de Android