modificar,eliminar y consultar en android.docx

22
CONSULTAR EN ANDROID UTILIZANDO HTTP Lo primero que haremos será agregar una nueva clase Personas, la cual tendrá como atributos: Nombre DN Teléfono Email Una vez la tengamos creada, nos vamos a nuestra clase y creamos nuevos atributos que vamos a utilizar: private int posicion=0;

Upload: jefferson-torres

Post on 17-Dec-2015

9 views

Category:

Documents


0 download

TRANSCRIPT

CONSULTAR EN ANDROID UTILIZANDO HTTP

Lo primero que haremos ser agregar una nueva clase Personas, la cual tendr como atributos:

Nombre DN Telfono Email

Una vez la tengamos creada, nos vamos a nuestra clase y creamos nuevos atributos que vamos a utilizar:

private int posicion=0; private List listaPersonas;

Esta lista la iniciamos en el mtodo onCreate():

listaPersonas=new ArrayList();

Posteriormente creamos un mtodo para obtener los datos del WebService:

Este mtodo es de tipo String, por lo tanto nos devolver una cadena con los resultados obtenidos de nuestro servidor.

Creamos una variable local de tipo String llamada resquest, esta almacenar la respuesta. String resquest=" ";

Instanciamos HttpClient y HttpPost para comunicarnos con nuestro Webservice.

HttpClient httpclient=new DefaultHttpClient();

HttpPost httppost=new HttpPost("Url de nuestro webservice en el servidor");

Con respecto a nuestro mtodo "ingresar", no vamos a crear un ArrayList para almacenar datos y pasrselos al servidor, ya que es el servidor el que nos tiene que pasar los datos.

Tampoco vamos codificar datos, ya que no tenemos datos que codificar.

Creamos un objeto de la clase ResponseHandler, ya que para obtener una respuesta el webservice debemos pasarle este handler al mtodo excute() de HttpClient por parmetro para que nos devuelva los datos.

ResponseHandler responseHandler=new BasicResponseHandler();

Le decimos a HttpClient que ejecute la peticin a nuestro webservice, y este nos devolver una String, el cual almacenamos en resquest:

resquest=httpclient.execute(httppost, responseHandler);

Ya tenemos el cdigo para obtener los datos del servidor, veamos que es lo que hace nuestro Webservice cuando conectamos con l.:

Con relacin al servicio en PHP se debe tener en cuenta que:

Hostname: Nombre del host. Database: Nombre de nuestra base de datos. Username: Nombre de usuario del servidor. Password: Contrasea del servidor.

Posteriormente nuestro WebService intentar conectar al servidor, enviando un informe de error en caso de no porder conectar:

$localhost=mysql_connect($hostname_localhost,$username_localhost,$password_localhost)

or trigger_error(mysql_error(),E_USER_ERROR);

Una vez conectado al servidor, intentar conectar con nuestra base de datos

mysql_select_db($database_localhost, $localhost);

Luego, creamos una sentencia sql para que obtenga todos los datos del servidor.

$query_search = "select * from personas order by dni";

Se ejecuta la sentencia sql:

$query_exec = mysql_query($query_search) or die(mysql_error());

Finalmente, y mediante un bucle WHILE nos ir imprimiendo los resultados.

while($row = mysql_fetch_array($query_exec)){echo $row['nombre']." ".$row['dni']." ".$row['telefono']." ".$row['email']."/"; }

Cerramos la conexin:

mysql_close($localhost);

Ahora vamos a crear un mtodo que nos filtre los resultados y nos lo almacene en objetos:

Para ello debemos:

Crear un mtodo booleano que en caso de no obtener resultados de nuestro WebService retornar false y en caso de obtener resultados, lo descompone, lo almacena y retornar true.

Limpiamos nuestro ArrayList por si tuviese algo de informacin.

listaPersonas.clear();

Ahora creamos una condicin if para comprobar que nuestro resultado contiene informacin para poder continuar.

if(!mostrar().equalsIgnoreCase(""))

Si la condicin es cierta, pasamos el primer filtro separando la informacin por bloques utilizando como elemento separador la barra "/"

String [] cargaDatos=mostrar().split("/");

Se debe tener en cuenta que nuestro webservice imprima una barra "/" cada vez que muestre una fila, es la que utilizamos para el split.

Tenemos las filas almacenadas en un array, pero cada posicin del array almacena una String con todos los datos de la persona, por lo tanto le vamos a pasar un segundo filtro para almacenar finalmente los datos de forma individual.

Creamos un for que recorra nuestro array "cargaDatos".

for (int i = 0; i < cargarDatos.length; i++) {

Por cada posicin del array lo descomponemos con otro split, en este caso utilizaremos br para nuestro split.

String datosPersona[]=cargarDatos[i].split("");

quitarle las comillas a "br", que es que si no me crea un conflicto con el html y me genera un salto de lnea

Creamos un objeto de la clase Personas

Personas personas=new Personas();

Le damos a cada atributo de personas el valor almacenado en nuestro array "datosPersonas"

personas.setNombre(datosPersona[0]);personas.setDni(datosPersona[1]);personas.setTelefono(datosPersona[2]);personas.setEmail(datosPersona[3]);

Finalmente agregamos nuestro objeto Personas a nuestro ArrayList:

listaPersonas.add(personas);

Antes de pasar a nuestro AsyncTask para cargar los datos, vamos a crear otro mtodo que nos imprima en nuestro formulario los datos almacenados en nuestro ArrayList.

En este mtodo le pasamos una posicin por parmetro y, corriendo en un hilo, nos busca el objeto almacenado en la posicin indicada y lo muestra en nuestro formulario.

Finalmente lo ejecutamos todo en nuestro AsyncTask:

Ya con todo, nos vamos a nuestro botn mostrar y le damos una accin:

Finalmente creamos los ImageButton "mas" y "menos", la accin de estos botones sera:

La accin de "mas" sera:

Comprobar que la lista no este vaca

if(!listaPersonas.isEmpty)

Si no esta vaca comprueba que la variable int posicion no tenga un valor superior al tamao de nuestro ArrayList

if(posicion>=listaPersonas.size()-1)

Si es superior o igual, iguala el valor de posicion al tamao de nuestro ArrayList y muestra el objeto, en nuestro formulario, de dicha posicin.

posicion=listaPersonas.size()-1; mostrarPersona(posicion)

Si no es superior o igual, suma +1 al valor de posicin y muestra los resultados en nuestro formulario:

posicin++; mostrarPersona(posicion);

La accin de nuestro botn "menos" es muy parecida:

MODIFICAR EN ANDROID UTILIZANDO HTTP

Primero debemos modificar el archivo xml para que quede de la siguiente manera:

Luego creamos un mtodo para conectar con nuestro webservice:

Este mtodo es exactamente igual que el mtodo insertar, lo nico que cambia es la url del servidor:

Luego implementamos el servicio web en PHP para actualizar, que nos debe quedar de la siguiente forma:

La informacin que debemos almacenar del Localhost es la siguiente:

Hostname: Nombre del host. Database: Nombre de nuestra base de datos. Username: Nombre de usuario del servidor. Password: Contrasea del servidor.

Posteriormente, con los datos de servidor que hemos introducido, le pedimos que conecte al servidor y almacene la respuesta en otra variable:

$localhost=mysql_connect($hostname_localhost,$username_localhost,$password_localhost)

Si no puede conectar enviara un informe de error

or trigger_error(mysql_error(),E_USER_ERROR);

Una vez conectado al servidor, buscar nuestra base de datos y se conectar:

mysql_select_db($database_localhost, $localhost);

Posteriormente, y una vez encontrada la base de datos, obtendremos las variables que le pasamos por nuestra aplicacin y las almacenar en otras variables que pueda manejar mejor.

$nombre=$_POST['nombre']; $dni=$_POST['dni']; $telefono=$_POST['telefono']; $email=$_POST['email'];

Tengamos en cuenta de que los nombres entre comillas simples se llaman igual a las variables que les pasamos por nuestra app.

Almacenamos las variables e introducimos los valores en un sentencia sql para realizar una consulta al servidor:

$query_search = "update personas set nombre='".$nombre."', telefono='".$telefono."',email='".$email."' where dni='".$dni."'";

Finalmente se realizar la consulta a nuestro servidor, el cual, en caso de fallar la sentencia, nos enviar un informe de error.

$query_exec = mysql_query($query_search) or die(mysql_error());

Cerramos la conexin.mysql_close($localhost);

Antes de ir con nuestra AsyncTask, debemos crear un mtodo que no podamos modificar el campo dni, ya que lo debemos utilizar como primary key:

Lo que hace este mtodo es recorrer nuestro ArrayList listaPersonas comprobando el campo dni de cada persona, si el dni de nuestro campo EditText dni coincide con el campo dni del objeto personas, devuelve true, por lo que podr actualizar nuestro registro, en caso de que no coincida, mostrar un Toast comunicando que no puede modificar el registro (porque nuestro dni no existe en la base de datos) y nos devuelve false.

Ahora creamos el AsyncTask:

En el mtododoInBackgroundcreamos una condicin if, en el cual introducimos como condicin el mtodo update() si se los datos han sido actualizados, el mtodo nos devuelve true y nos muestra unToastcon el xito de la operacin y limpiando nuestro formulario, todo esto debe correr en un hilo ya que si no bloqueara nuestroAsyncTasky nos generara errores, si los datos no han podido ser actualizados, el mtodo update() nos devolver false, y nos mostrar unToastcorriendo en un hilo.

Finalmente le damos una accin a nuestro botn actualizar:

ELIMINAR EN ANDROID UTILIZANDO HTTP

Primero creamos un mtodo en la clase WebServiceExample para que conecte con el webservice asociado y le pase un parmetro, DNI, para que nos borre a nuestro usuario segn su dni.

La estructura es similar a la de insertar solo, se cambia en la URL el archivo delete.php.

Luego creamos el servicio web en PHP para poder eliminar los registros:

Rellenamos las variables dellocalhostcon la informacin de nuestro servidor:

Hostname: Nombre del host.Database: Nombre de nuestra base de datos.Username: Nombre de usuario del servidor.Password: Contrasea del servidor.

Posteriormente, con los datos de servidor que hemos introducido, le pedimos que conecte al servidor y almacene la respuesta en otra variable:

$localhost=mysql_connect($hostname_localhost,$username_localhost,$password_localhost)

Si no puede conectar enviara un informe de error

or trigger_error(mysql_error(),E_USER_ERROR);

Una vez conectado al servidor, buscar nuestra base de datos y se conectar:

mysql_select_db($database_localhost, $localhost);

Posteriormente, y una vez encontrada la base de datos, obtendr la variable que le pasamos por nuestra aplicacin y las almacenar en otra variable que pueda manejar mejor.

$dni=$_POST['dni'];

Almacenada la variable, introduce el valor en un sentencia sql para realizar una consulta al servidor:

$query_search = "delete from personas where dni='".$dni."'";

Finalmente, y si todo esta bien, realizar la consulta a nuestro servidor, el cual, en caso de fallar la sentencia, nos enviar un informe de error.

$query_exec = mysql_query($query_search) or die(mysql_error());

Cerramos la conexin.

mysql_close($localhost);

De nuevo creamos una clase AsyncTask para que ejecute nuestra conexin en segundo plano:

En el mtododoInBackgroundcreamos una condicinif, en el cual introducimos como condicin el mtodoeliminar()si se los datos han sido eliminados, el mtodo nos devuelvetruey nos muestra unToastcon el xito de la operacin y limpiando nuestro formulario, todo esto debe correr en un hilo ya que si no bloqueara nuestroAsyncTasky nos generar errores, si los datos no han podido ser borrados, el mtodoeliminar()nos devolverfalse, y nos mostrar unToastcorriendo en un hilo.

Finalmente vamos a nuestro botn eliminar y le damos una accin: