Diseño Android: Spinner

android tip

El widget Spinner de Android muestra una lista desplegable para seleccionar un único elemento y es equivalente al típico select de html o los ComboBox de otros entornos de desarrollo. En este artículo vamos a ver cómo utilizar y personalizar completamente tanto el Spinner en sí mismo como la lista de opciones desplegables en lo que respecta a estilos y contenido. Con los estilos, tenemos el mismo problema que ya hemos visto en algunos tips: se aplica el estilo del fabricante/versión de Android y este puede resultar antiestético con el diseño general de la aplicación.

Entorno de pruebas:

Requisitos: Conocimientos muy básicos de Android SDK.

Spinner básico

Al igual que un ListView, el contenido de la lista desplegable con los elementos del Spinner proviene de un Adapter (en el ejemplo de la documentación es un array definido en un fichero xml). A continuación se muestra un ejemplo básico de Spinner con su layout y la Activity asociada la cual mostrará un Toast si se selecciona un elemento. Esta selección no es obligatoria, ya que pulsando “back” la lista se cierra.

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (II): Clientes

logo java

Tras la primera parte del artículo ya tenemos una aplicación web que publica mediante SOAP un bean de Spring de forma muy sencilla gracias a JAX-WS y Apache CXF. Ahora toca volver a utilizar estas tecnologías pero con el objetivo contrario, esto es, consumir un servicio web que en nuestro caso será el del primer artículo. Lo haremos con un proyecto Maven y una clase Main y, opcionalmente, con Spring.

Sin Spring (cxf-client)

Usaremos un proyecto Maven estándar no web con el siguiente pom.xml donde sólo se tomarán como dependencias las de CXF y log4j

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (I) : Servidor


VERSIONES

  1. 26/03/2013 (Primera publicación)
  2. 11/05/2013:

    • Comentarios sobre Spring WS y enlace a comparativa
    • Limitaciones de los métodos expuestos como WS

logo java

Java API for XML Web Services (JAX-WS), es una especificación para la creación de servicios web basados en XML-SOAP que vino a suponer la evolución de la especificación JAX-RPC y que forma parte de JEE 5 y Java SE 6. Está basada en anotaciones y permite la creación tanto de servicios como de clientes de servicios web SOAP directamente con clases Java POJO sin tener que lidiar con XML lo que simplifica enormemente trabajar con esta tecnología. A pesar del auge que han tenido en los últimos años los servicios REST(y que en Java cuentan con la especificación JAX-RS), los servicios web SOAP se siguen usando ampliamente y son una opción perfectamente válida para la publicación de APIs y la interoperabilidad de aplicaciones. En este enlace hay una interesante comparativa entre ambas tecnologías.

JAX-WS cuenta con una implementación de referencia llamada Metro, aunque también existen otros productos que implementan la especificación como CXF (el antigüo XFire para los que ya llevamos algunos añitos en esto:)) o Axis 2. En este tutorial vamos a partir de la base de que ya tenemos una aplicación web que utiliza Spring (al menos su contenedor IoC) y queremos publicar los métodos de un bean como un servicio web SOAP estándar para su consumo por parte de terceras aplicaciones independientemente de su lenguaje. El módulo Spring WS permite la creación de servios web Contract-first y un soporte (limitado) del estándar JAX-WS pero, insisto, lo que nosotros queremos es generar el servicio web automáticamente a partir de nuestro código Java sin definir el WSDL o configuración de mensajes XML alguna. Por ello vamos a recurrir a CXF, integrable a la perfección con Spring y un producto más maduro y potente que Spring-WS (por ejemplo, usando CXF incluso se puede combinar JAX-WS y JAX-RS en un mismo bean).

Veremos lo sencillo que resulta tanto publicar servicios web como consumir estos servicios en aplicaciones Java con CXF generando el cliente en tiempo de ejecución a partir de las clases implicadas, lo que nos evitará tener que generar clientes estáticos con herramientas como Axis-WSDL2Java a partir del descriptor wsdl del servicio.

Nota: Aquí hay una interesante comparativa en inglés entre los puntos fuertes y débiles de Axis 2, CXF y Spring WS, recomendándose este último.
Seguir leyendo

Diseño Android: Interfaces web con WebView

android

En el primer artículo sobre el widget WebView, vimos que este componente encapsula el motor html/Javascript WebKit , y cómo utilizarlo para implementar un sencillo navegador. En este artículo se va a mostrar de forma muy simple cómo utilizar WebView para diseñar las interfaces gráficas (o algunas partes de ellas) de nuestras aplicaciones Android utilizando las tecnologías web soportadas por WebKit (html, javascript, CSS, html5…) haciendo que estas interfaces puedan interactuar con nuestras Activities. Las ventajas de esta praxis pueden ser:

  • Si tienes buenos conocimientos de desarrollo web, puedes reutilizarlos y no necesitas profundizar en los layouts y widgets de Android. Si toda la interfaz es web, incluso te puedes olvidar de ellos. Esto puede hacer el desarrollo más rápido y barato.
  • Las posibilidades de diseño que brinda el desarrollo web van mucho más allá de las posibilidades del desarrollo nativo Android, gracias tecnologías como JQuery y sus plugins libres o CSS. Personalizar en grado máximo las aplicaciones Android tiende a ser a veces doloroso.
  • El front-end puede ser implementado por un desarrollador web sin conocimientos de Android, y el backend ser responsabilidad de un programador Java.
  • La interfaz se puede reutilizar casi tal cual para Android, iOS, Blackberry…es decir, cualquier dispositivo que nos permita integrar interfaces de usuario web con la API nativa.

Seguir leyendo

JPA + Hibernate: Claves primarias

logo java

JPA – Java Persistence API es una especificación (concretamente JSR-317 en su última versión) que debutó con JEE5 junto a EJB 3.0 y que intentó superar la complejidad que suponía hasta el momento utilizar EJB (en el caso de JPA hablaríamos de los EJB de Entidad usados para la persistencia) , además de estandarizar hasta cierto punto los ORM que como Hibernate o TopLink por aquel entonces ya eran usados masivamente, especialmente Hibernate que suponía casi un estándar de facto (de hecho JPA se “inspiró” bastante en este último). La versión 2.0 de la especificación amplió sus capacidades con nuevas opciones de mapeo y una API para la creación de consultas programáticamente, algo con lo que Hibernate ya contaba bastante antes de la aparición de JPA 1.0.La versión 2.1 está ya muy cerca de su publicación final

Siempre que se habla de JPA tenemos que tener muy claro que no es más que una especificación por lo que para utilizarla tendremos que recurrir a un producto que implemente este estándar, y que además este producto puede ofrecer soluciones y alternativas propias fuera del estándar pudiéndose combinar ambas (aunque en este caso sería complicado cambiar de implementación a posteriori). De todas implementaciones, voy a utilizar Hibernate como “vendor” por ser la más conocida y utilizada aunque existen otras alternativas excelentes como OpenJPA de Apache, ObjectDB o la ya mencionada TopLink.

El objetivo de este tutorial es doble:

  • Proporcionar un ejemplo listo para usar de JPA con la implementación de Hibernate configurado para las BBDD más populares. Este ejemplo forma parte de la colección de demos de danielme.com(aquí) y está disponible en GitHub.
  • Utilizar este ejemplo como base para estudiar las posibilidades que JPA con Hibernate ofrece para la gestión de claves primarias en varias bases de datos.

Seguir leyendo

Diseño Android: Dashboard UI con LinearLayout

android

El patrón de diseño Dashboard, que podríamos traducir como Panel de control, es un patrón de diseño de intefaces gráficas que llegó a ser muy popular entre las aplicaciones Android, principalmente porque permite al usuario nada más acceder a la app conocer de un vistazo las principales funcionalidades disponibles y acceder directamente a ellas, ubicando todos los accesos en una una única y misma pantalla de un smartphone.

Pero lo cierto es que su uso está en franco retroceso gracias a los últimos esfuerzos y apuestas de Google con la difusión de patrones y herramientas para unificar el diseño genérico de las apps de Android. De este modo, hace tiempo que la tendencia es utilizar elementos como ActionBar, ViewPager, Sliding Menus laterales,etc, que además podemos ver en las últimas versiones de las apps propias de Google como Google Play o Google + (curiosamente algunas de las primeras apps de Google sí que usaban un dashboard) y que, independientemente de que sean más usables o no que los dashboard, es cierto que visualmente son más llamativas. No obstante, es posible que en alguna ocasión consideremos oportuno optar por un diseño de este tipo, aunque sólo sea para componer una parte de una pantalla. Una aplicación popular que actualmente usa este diseño es Yelp

yelp

No hay un widget o layout Dashboard en la SDK de Android, así que el objetivo de este mini tutorial es crear un dashboard que podamos convertir en plantilla o snippet reutilizable y así poder incluir de forma inmediata en cualquier app este patrón de diseño gráfico. Voy a hacerlo con LinearLayout, aunque existen otras opciones como utilizar TableLayout o incluso modificar el diseño programáticamente. Simplemente mostraré la solución que uso y me da buenos resultados, además de ser sumamente simple aunque obviamente sólo válida para paneles estáticos con el contenido predefinido (en este tutorial no se va a escribir código).

En este artículo sólo se muestran y analizan los layout, pero al final se proporcionará una completa demo con target Android 2.1 para poder ver los resultados en acción y a la que corresponde las capturas mostradas. En esta demo también se aplican unos estilos básicos para que el resultado sea vistoso, y se ha usado ActionSherlockBar que será ampliamente tratado en un futuro articulo.

Seguir leyendo

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.