Crear un webservice REST para Android con PHP – Parte 2
Después de ver en la parte 1 de este tutorial como crear la parte del webservice (PHP y MySQL), es hora de ver como crear el cliente, osea, la app de Android. En este caso, solamente nos va a hacer falta la conexión a Internet o LAN para hacer las llamadas al servidor y un parser, para leer la información XML que nos devuelve. Vamos a ello…
Al final del articulo, hay un enlace para descargar la aplicación entera, ya que hay partes muy básicas (botones y cajas de texto), o alguna parte repetitiva, de las que no voy a poner el código.
El interface es sencillo; son 4 cajas de texto: id, nombre, email, partidas (que son los campos de la base de datos), 4 botones (Crear usuario, Listar usuarios, Ver un usuario y Modificar un usuario) y debajo hay un listview para los resultados. Quedaría así:
Ahora vamos con el código. Primero declaramos las variables de los Button, EditText, ListView y también un HttpClient y un HttpResponse. Declaramos ademas las 4 constantes para las llamadas a los webservices:
private static final String URL_USERS = "http://10.0.2.2/apiprueba/users.php"; private static final String URL_USER = "http://10.0.2.2/apiprueba/searchuser.php?id=%1$s"; private static final String URL_INSERT = "http://10.0.2.2/apiprueba/insertuser.php?nombre=%1$s&email=%2$s&partidas=%3$s"; private static final String URL_EDIT = "http://10.0.2.2/apiprueba/updateuser.php?id=%1$s&partidas=%2$s";
Si usamos el emulador, la ip tiene que ser la 10.0.2.2. Si utilizamos el móvil, habrá que poner la ip de la red local (192.169….) aunque a veces no funciona. Tampoco nos va a funcionar si ponemos localhost o 127.0.0.1.
Ahora vamos a ver los métodos. Primero los dos mas sencillos, que son para mostrar un AlertDialog con el resultado de la operación y otro para mostrar los usuarios o el usuario en el ArrayList.
private void showList(List usuarios) { ArrayAdapter adaptador = new ArrayAdapter(this, android.R.layout.simple_list_item_1, usuarios); listView.setAdapter(adaptador); } public void showResult(String msg){ AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle("Resultado"); alertDialog.setMessage("Resultado de la Operacion: " + msg); alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); alertDialog.setIcon(R.drawable.ic_launcher); alertDialog.show(); }
El siguiente método es el mas importante, el que parsea el XML. Para esto utilizamos un objeto XmlPullParser. Este recibe un String con el xml completo y va leyéndolo. Si encontramos una respuesta con un mensaje de confirmación o de error, sacamos el texto plano y llamamos al método ShowResult para que muestre el Alert. En el caso de que la respuesta sea un listado de usuarios (Para el botón listar o ver), vamos guardando la información del usuario en un String, lo añadimos al ArrayList usuarios y se lo pasamos al método showList. Veamos el código:
public void parse(String result){ XmlPullParser parser = Xml.newPullParser(); List<String> usuarios = new ArrayList<String>(); try { parser.setInput(new StringReader(result)); int evento = parser.getEventType(); String apoyo = ""; while (evento != XmlPullParser.END_DOCUMENT) { String etiqueta = null; switch (evento) { case XmlPullParser.START_DOCUMENT: System.out.println("Start xml"); break; case XmlPullParser.START_TAG: System.out.println("Start tag"); etiqueta = parser.getName(); if (etiqueta.equals("error")) { showResult(parser.nextText()); } if (etiqueta.equals("result")) { showResult(parser.nextText()); } if (etiqueta.equals("user")) { } if (etiqueta.equals("id")) { apoyo = parser.nextText() + " || "; } if (etiqueta.equals("nombre")) { apoyo += parser.nextText() + " || "; } if (etiqueta.equals("email")) { apoyo += parser.nextText() + " || "; } if (etiqueta.equals("partidas")) { apoyo += parser.nextText(); } break; case XmlPullParser.END_TAG: System.out.println("End tag"); etiqueta = parser.getName(); if (etiqueta.equals("user")) { usuarios.add(apoyo); System.out.println("A�adido usuario: " + apoyo); } if (etiqueta.equals("root")) { if (usuarios.size()!=0){ showList(usuarios); } } break; default: break; } evento = parser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
Ahora ya solo queda manejar los 4 botones. El código es similar en los 4. Hacemos la llamada utilizando las constantes que habíamos definido al principio, y con el resultado los mandamos al método parse(). Veamos por ejemplo el botón Crear Usuario
btnCrear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { HttpPost httpPost = new HttpPost(String.format(URL_INSERT, txtNombre.getText().toString(), txtEmail.getText().toString(), txtPartidas.getText().toString())); try { httpResponse = httpClient.execute(httpPost); resp = EntityUtils.toString(httpResponse.getEntity()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(resp); parse(resp); } });
Con esto ya tenemos la aplicación completa. A la hora de probarla, hay que tener en cuenta:
- Botón Crear: necesita nombre, email y partidas.
- Botón Listar: no necesita nada, muestra los usuarios.
- Botón Ver: necesita el id del usuario que queremos ver.
- Botón Editar: necesita un id y el numero de partidas, que es lo que se va a modificar.
La aplicación entera la podéis descargar desde https://copy.com/2xFJf9aEFd6I.
¿Te ha gustado este artículo? ¿te ha servido de ayuda? No dudes en comentarlo o compartirlo!
Un saludo, Fran Aramayo
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.