Ejemplo: CurrencyConverter

per Victor Carceler darrera modificació 2020-03-25T15:39:30+01:00

Vamos a escribir un conversor de moneda como aplicación de ejemplo para mostrar algunas de las características de la plataforma.

1. Conversor de moneda básico

Es fácil crear un conversor de moneda básico que permita convertir una cantidad de euros a dólares. Como se trata de un ejemplo sencillo no se podrá ni fijar el ratio de conversión ni la moneda de origen/destino que será siempre de € a $. Dejaremos para más adelante estas mejoras.

Podemos crear un nuevo proyecto en Eclipse que contendrá la actividad CurrencyConverter, y utilizando el editor de XML podemos editar el fichero res/layout/main.xml para que contenga:

  • Un par de EditText utilizados como entrada del valor a convertir y salida del resultado. Hay que cambiar las propiedades del EditText de salida para que no sea editable ni tenga el foco, y del primero para que sólo acepte valores numéricos.
  • Un botón para que el usuario pueda solicitar la conversión
  • Un par de TextView que acompañen a cada EditText como etiquetas con los valores '€' y '$' respectivamente.
  • Para que todo se vea bien alineado será necesario utilizar un par de LinearLayouts en modo horizontal, uno para agrupar la etiqueta € con su EditText y lo mismo para el caso de la etiqueta $ y el EditText de salida.

Puede descargar el proyecto de eclipse con el layout definido, en el que hay que implementar el listener del botón que realice la moneda. Represente el valor de conversión de euros a dólares como una propiedad privada de la clase con valor constante (final).

2. Conversor de moneda con valores de cambio actualizados

Los tipos de cambio entre diferentes monedas cambian de valor a diario, así que de alguna manera habrá que introducir el valor correcto en nuestra aplicación para que las conversiones se realicen de manera adecuada. Sería posible construir una interfaz que permitíese al usuario especificar el tipo de cambio o, aprovechando que la mayoría de dispositivos Android cuentan con acceso a la red, es posible descargar de manera automática los tipos de cambio actualizados desde la web del banco central europeo: http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

Cada aplicación debe especificar, mediante su fichero AndroidManifest.xml, que permisos espera recibir del sistema. De este modo, cuando se instala la aplicación el usuario puede ver un listado detallado de los permisos que solicita y aceptarlos o denegarlos. Si esperamos descargar el fichero anteriormente mencionado necesitamos hacer uso del permiso para acceder a Internet. Así será necesario añadir al manifiesto de la aplicación:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

En Java es posible procesar datos XML tanto utilizando la API SAX como DOM. Puede ver un ejemplo sencillo que procesa los datos del banco central europeo, en la clase XMLParsingBCE. Descargue el ejemplo y pruébelo, después debería ser capaz de escribir:

  • La clase Converter que será capaz de convertir cantidades en una divisa a otra divisa
  • La clase ConverterFactory que será capaz de retornar un conjunto de instancias de Converter a partir de los datos del BCE.

Se espera de Converter:

  • Que cuente con las propiedades privadas de tipo cadena srcCurrency y dstCurrency para almacenar los nombres de la divisa origen y destino de la conversión.
  • Que cuente con la propiedad privada de tipo double rate para expresar el tipo de cambio
  • Que cuente con el constructor Converter(String srcCurrency, String dstCurrency, double rate)
  • Que cuente con el método público double convert(double value) que permita realizar una conversión de divisa
  • Que cuente con los métodos públicos String getSrc() y String getDst() que permitan obtener los identificadores de inicio y fin de la conversión
  • Que cuente con el método público String toString() que retorne una cadena que exprese la conversión realizada, por ejemplo: "EUR -> USD (1.3692)"

Se espera de ConverterFactory:

  • Que cuente con el método Converter[] getConverters() de tal manera que se retorne un array con todos los objetos Converter necesarios para representar los cambios de divisa expresados por el BCE, en uno y otro sentido. Es decir, el BCE especifica el ratio para la conversión de 1€ a dólares. Esta información permitirá generar un conversor que pase de euros a dólares y otro que realice el paso inverso. Si algún ratio no tiene formato adecuado se ignorará.

Con estos elementos debería ser fácil modificar la aplicación para que se realice la conversión de euros a dólares con el tipo de cambio actualizado.

3. Interfaz de usuario para permitir el cambio a múltiples divisas

Ya que el BCE proporciona los tipos de cambio para varias divisas sería deseable mejorar la interfaz de nuestra aplicación para que se pueda escoger la conversión a realizar. Es posible utilizar un Spinner para mostrar la lista de conversores disponibles y que el usuario escoja cuál se va a utilizar. Consulte el tutorial de uso del Spinner antes de poner en marcha la idea.

 

Más información: