jueves, 31 de enero de 2013

Tiempo Amet Android

Introducción:

En este tutorial vamos a explicar como crear una aplicación que nos muestre los datos del tiempo para hoy y para mañana a partir de un fichero xml que se descarga de la página oficial de AMET.

En este tutorial aprenderás a:

  • Descargar e interpretar un fichero xml desde internet
  • Utilizar la clase XmlPullParseFactoy
Espero que le guste y le resulte fácil de entender. No dude en comentar.

¡ Saludos !



Enlaces de interés:

Código Fuente
Puede descargar si lo desea el código fuente de este proyecto.


Ayuda XmlPullFactory
Aquí podrás encontrar la ayuda oficial sobre la clase XmlPullFactory, se lo recomiendo para ampliar conocimientos y comprender mejor su funcionamiento.



Pasos a seguir:

1. Creamos una interfaz en la que podamos mostrar los datos que vamos a obtener del fichero xml. Un ejemplo de interfaz sería el siguiente.


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:orientation="vertical" > <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hoy" android:textAppearance="?android:attr/textAppearanceLarge" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/estadoDelCielo" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtHCielo" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/temperaturaMaxima" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtHMaxima" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/temperaturaMinima" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtHMinima" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/linearLayout2" android:layout_marginTop="100dp" android:orientation="vertical" > <TextView android:id="@+id/TextView07" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/manana" android:textAppearance="?android:attr/textAppearanceLarge" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/estadoDelCielo" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtMCielo" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView08" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/temperaturaMaxima" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtMMaxima" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/temperaturaMinima" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtMMinima" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </LinearLayout> </RelativeLayout>


2. Como vamos a tener que acceder a internet le damos al manifiesto el siguiente permiso para que nos permita conectarnos a internet.

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ACDAT.ejercicio4" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".TiempoActivity" android:label="@string/title_activity_tiempo" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>


3. Inicializamos los campos que vamos a utilizar en la clase de la actividad principal.

/** * Muestra el tiempo del día de hoy y el de mañana de la ciudad de Málaga * * @author José Miguel Acosta Martín * */ public class TiempoActivity extends Activity { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CAMPOS // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Campos gráficos private TextView txtHCielo; // Campo gráfico que muestra el estado del cielo de hoy private TextView txtHMinima; // Campo gráfico que muestra la temperatura mínima de hoy private TextView txtHMaxima; // Campo gráfico que muestra la temperatura máxima de hoy private TextView txtMCielo; // Campo gráfico que muestra el estado del cielo de mañana private TextView txtMMinima; // Campo gráfico que muestra la temperatura mínima de mañana private TextView txtMMaxima; // Campo gráfico que muestra la temperatura máxima de mañana // Otros campos private URL url; // Almacena la url del xml donde está almacenada la predicción meteorológica private String[] estadoCielo; // Almacena el estado del cielo de hoy y de mañana private String[] temperaturaMaxima; // Almacena la temperatura máxima de hoy y de mañana private String[] temperaturaMinima; // Almacena la temperatura mínima de hoy y de mañana ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // FIN CAMPOS // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

4. Creamos el método que va a leer el estado del cielo para hoy y para mañana.

/** * Lee el estado del cielo para hoy y para mañaana * * @param xml Fichero xml donde se encuentra la predicción meteorológica */ public void leerEstadoCielo(XmlPullParser xml){ // CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////////// int contadorDia; // Almacena la cuenta los días leidos int contadorEstadoCielo; // Almacena la cuenta de las etiquetas <estado_cielo> leiddo int evento; // Almacena el evento obtenido // FIN CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////// // EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////////// try { // Inicialización de los contadores contadorDia = 0; contadorEstadoCielo = 0; // Obtiene el evento del fichero xml evento = xml.getEventType(); // Recorre el fichero xml while(evento != XmlPullParser.END_DOCUMENT){ switch (evento) { case XmlPullParser.START_TAG: // Contabiliza los días leidos if (xml.getName().equals("dia")){ contadorDia++; } // Controla si es el día 1 if (contadorDia == 1){ // Si es el día 1 .... // Contabiliza if (xml.getName().equals("estado_cielo")){ contadorEstadoCielo++; } // Controla si es el primer estado del cielo if (contadorEstadoCielo == 1){ // Si es el primer estado del cielo ... // Almacena el contenido estadoCielo[0] = xml.getAttributeValue(1); } } // Controla si es el día 2 if (contadorDia == 2){ // Reinicia el contador contadorEstadoCielo = 0; // Contabiliza if (xml.getName().equals("estado_cielo")){ contadorEstadoCielo++; } // Controla si es el primer estado del cielo if (contadorEstadoCielo == 1){ // Si es el primer estado del cielo ... // Almacena el contenido estadoCielo[1] = xml.getAttributeValue(1); } } break; } // Avanza una posición evento = xml.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // FIN EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////// }

5. Creamos el método que va a leer la temperatura máxima para hoy y para mañana.

/** * Lee la temperatura máxima para hoy y para mañana * * @param xml Fichero xml donde se encuentra almacenada la predicción meteorológica */ public void leerTemperaturaMaxima(XmlPullParser xml){ // CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////////// int contadorDia; // Almacena la cuenta de los días leidos int contadorTemMaxima; // Almacena la cuenta de etiqueta <maxima> boolean leido1; // Indica si se ha leido la temperatura del día 1 boolean leido2; // Indica si se ha leido la temperatuda del día 2 int evento; // Almacena el evento obtenido del fichero xml // FIN CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////// // EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////////// try { // Inicializa los contadores contadorDia = 0; contadorTemMaxima = 0; // Inicializa las banderas leido1 = false; leido2 = false; // Obtiene el evento producido evento = xml.getEventType(); // Recorre el fichero xml while(evento != XmlPullParser.END_DOCUMENT){ switch (evento) { case XmlPullParser.START_TAG: // Contabiliza el día if (xml.getName().equals("dia")){ contadorDia++; } // Controla si es el día 1 if (contadorDia == 1){ // Si es el día 1 ... // Contabiliza las etiquetas <maxima> if (xml.getName().equals("maxima")){ contadorTemMaxima++; } // Controla que sea la primera etiqueta y no se haya leido antes if (contadorTemMaxima == 1 && !leido1){ // Si es la primera y no se ha leido // Avanza y almacena la temperatura máxima xml.next(); temperaturaMaxima[0] = xml.getText(); // Indica que se ha leido la temperatura del día 1 leido1 = true; } } // Controla si es el día 2 if (contadorDia == 2){ // Si es el día 2 ... // Reinicia el contador contadorTemMaxima = 0; // Contabiliza las etiquetas <maxima> if (xml.getName().equals("maxima")){ contadorTemMaxima++; } // Controla que sea la primera etiqueta y no se haya leido antes if (contadorTemMaxima == 1 && !leido2){ // Si es la primera y no se ha leido // Avanza y almacena la temperatura máxima xml.next(); temperaturaMaxima[1] = xml.getText(); // Indica que se ha leido la temperatura del día 2 leido2 = true; } } break; } // Avanza en el fichero xml evento = xml.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // FIN EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////// }

6. Creamos el método que va a leer las temperaturas mínimas para hoy y para mañana.

/** * Lee las temperatuas mínimas para el día de hoy y mañana * * @param xml Fichero xml donde está almacenada la predicción meteorológica */ public void leerTemperaturaMinima(XmlPullParser xml){ // CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////////// int contadorDia; // Almacena la cuenta de los días leidos int contadorTemMinima; // Almacena la cuenta de etiqueta <minima> boolean leido1; // Indica si se ha leido la temperatura del día 1 boolean leido2; // Indica si se ha leido la temperatuda del día 2 int evento; // Almacena el evento obtenido del fichero xml // FIN CAMPOS ////////////////////////////////////////////////////////////////////////////////////////////// // EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////////// try { // Inicializa los contadores contadorDia = 0; contadorTemMinima = 0; // Inicializa las banderas leido1 = false; leido2 = false; // Obtiene el evento producido evento = xml.getEventType(); // Recorre el fichero xml while(evento != XmlPullParser.END_DOCUMENT){ switch (evento) { case XmlPullParser.START_TAG: // Contabiliza el día if (xml.getName().equals("dia")){ contadorDia++; } // Controla si es el día 1 if (contadorDia == 1){ // Si es el día 1 ... // Contabiliza las etiquetas <minima> if (xml.getName().equals("minima")){ contadorTemMinima++; } // Controla que sea la primera etiqueta y no se haya leido antes if (contadorTemMinima == 1 && !leido1){ // Si es la primera y no se ha leido // Avanza y almacena la temperatura máxima xml.next(); temperaturaMinima[0] = xml.getText(); // Indica que se ha leido la temperatura del día 1 leido1 = true; } } // Controla si es el día 2 if (contadorDia == 2){ // Si es el día 2 ... // Reinicia el contador contadorTemMinima = 0; // Contabiliza las etiquetas <minima> if (xml.getName().equals("minima")){ contadorTemMinima++; } // Controla que sea la primera etiqueta y no se haya leido antes if (contadorTemMinima == 1 && !leido2){ // Si es la primera y no se ha leido // Avanza y almacena la temperatura máxima xml.next(); temperaturaMinima[1] = xml.getText(); // Indica que se ha leido la temperatura del día 2 leido2 = true; } } break; } // Avanza en el fichero xml evento = xml.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // FIN EJECUCIÓN /////////////////////////////////////////////////////////////////////////////////////////// }

7.  Creamos el método que lee todos los datos del fichero xml obtenido de internet.

/** * Obtiene y lee los datos del fichero xml donde está almacena la predicción meteorológica */ public void leerDatos(){ // CAMPOS ///////////////////////////////////////////////////////////////////////////////////////////////// XmlPullParserFactory factory; XmlPullParser xml; // Almacena el recurso xml // FIN CAMPOS ///////////////////////////////////////////////////////////////////////////////////////////// try { // Obtiene el fichero xml y lee el estado del cielo factory = XmlPullParserFactory.newInstance(); xml = factory.newPullParser(); xml.setInput(url.openStream(), "UTF-8"); leerEstadoCielo(xml); // Obtiene el fichero xml y lee la temperatura máxima factory = XmlPullParserFactory.newInstance(); xml = factory.newPullParser(); xml.setInput(url.openStream(), "UTF-8"); leerTemperaturaMaxima(xml); // Obtiene el fichero xml y lee la temperatura mínima factory = XmlPullParserFactory.newInstance(); xml = factory.newPullParser(); xml.setInput(url.openStream(), "UTF-8"); leerTemperaturaMinima(xml); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
8. Finalmente creamos un método para mostrar de forma organizada todos los datos obtenidos del fichero xml.

/** * Muestra los datos obtenidos al usuario */ public void mostrarDatos(){ // Mostrar datos hoy txtHCielo.setText(estadoCielo[0]); txtHMinima.setText(temperaturaMinima[0]); txtHMaxima.setText(temperaturaMaxima[0]); // Mostrar datos mañana txtMCielo.setText(estadoCielo[1]); txtMMinima.setText(temperaturaMinima[1]); txtMMaxima.setText(temperaturaMaxima[1]); }


FIN




Conversor de monedas XML Android

Introducción:

En este tutorial explicaremos como crear un conversor de monedas simple que obtenga el valor de la conversión desde un fichero xml creado por nosotros mismo.

La aplicación pedirá al usuario que introduzca una cantidad de euros y la aplicación la convertirá a varias monedas obteniendo el valor del cambio a partir de un documento xml guardado como recurso de la aplicación.

Espero que le guste y le resulte fácil de comprender. No dude en comentar.

¡ Saludos !



Enlaces de interés:

Código Fuente
Puede descargar si lo desea el código fuente de este proyecto.



Pasos a seguir:

1. Creamos el documento xml que tendrá almacena los cambios de las monedas y lo guardaremos en la carpeta xml, por lo que la ruta sería res/xml/monedas.xml.


<?xml version="1.0" encoding="UTF-8" ?> <monedas> <dolar>0.68</dolar> <libra>0.90</libra> <yen>0.76</yen> </monedas>

2. Una vez que ya tenemos creado el fichero xml creamos la actividad principal con la interfaz que permita introducir los euros y visualizar el cambio en otras monedas. Un ejemplo de interfaz sería el siguiente.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/edtxtEuros" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.24" android:hint="@string/euros" android:inputType="numberDecimal" > <requestFocus /> </EditText> <Button android:id="@+id/btnAceptar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="5" android:text="@string/aceptar" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/linearLayout1" android:layout_marginTop="92dp" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dolares" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtDolares" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="0" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/libras" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtLibras" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="0" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/llenes" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/txtYenes" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="0" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </LinearLayout> </RelativeLayout>

3. Ya que sabemos el tipo de interfaz que vamos a usar, declaramos los campos que vamos a utilizar en la clase de la actividad principal.

public class ConversorMonedasActivity extends Activity { ///////////////////////////////////////////////////////////////////// // CAMPOS // ///////////////////////////////////////////////////////////////////// // Campos gráficos private EditText edtxtEuros; // Campo gráfico donde el usuario introducirá la cantidad en euros private Button btnAceptar; // Botón donde el usuario iniciará la conversión private TextView txtDolares; // Campo gráfico donde se le mostrará al usuario el cambio a dólares private TextView txtLibras; // Campo gráfico donde se le mostrará al usuario el cambio a libras private TextView txtYenes; // Campo gráfico donde se le mostrará al usuario el cambio a yenes // Otros campos private int idRecurso; ///////////////////////////////////////////////////////////////////// // FIN CAMPOS // /////////////////////////////////////////////////////////////////////

4. Inicializamos los campos en el método onCreate() y también los eventos ha utilizar.

/** * Cuando se crea la actividad ... */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversor_monedas); // INICIALIZACIÓN CAMPOS /////////////////////////////////////////// // Inicialización campos gráficos edtxtEuros = (EditText) findViewById(R.id.edtxtEuros); btnAceptar = (Button) findViewById(R.id.btnAceptar); txtDolares = (TextView) findViewById(R.id.txtDolares); txtLibras = (TextView) findViewById(R.id.txtLibras); txtYenes = (TextView) findViewById(R.id.txtYenes); // Inicialización otros campos idRecurso = R.xml.monedas; // FIN INICIALIZACIÓN CAMPOS //////////////////////////////////////// ///////////////////////////////////////////////////////////////////// // EVENTOS // ///////////////////////////////////////////////////////////////////// btnAceptar.setOnClickListener(new OnClickListener() { /** * Calcula y muestra el cambio */ public void onClick(View v) { mostrarDatos(); } }); ///////////////////////////////////////////////////////////////////// // FIN EVENTOS // ///////////////////////////////////////////////////////////////////// }


5. Creamos el método que nos va a permitir leer el cambio a dólar del documento xml.

/** * Obtiene el cambio de dólares de un documento xml * * @return La cantidad de dólares obtenido */ public float leerDolares(){ // CAMPOS ////////////////////////////////////////////////////// XmlResourceParser xml; int evento; float dolares = 0; // Almacena la cantidad de cambio de dólares // FIN CAMPOS /////////////////////////////////////////////////// // EJECUCIÓN //////////////////////////////////////////////////// try { xml = getResources().getXml(idRecurso); evento = xml.getEventType(); // Recorre todo el documento xml while (evento != XmlPullParser.END_DOCUMENT){ // Comprueba el evento producido switch (evento) { // Comprueba si está en el inicio de una etiqueta case XmlPullParser.START_TAG: // Comprueba el nombre de la etiqueta if (xml.getName().equals("dolar")){ // Si es correcto ... // Obtiene el cambio xml.next(); dolares = Float.parseFloat(xml.getText()); } break; } // Avanza una posición en el xml evento = xml.next(); } } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dolares; // FIN EJECUCIÓN //////////////////////////////////////////////// }

6. Creamos el método que obtiene el cambio a libras del documento xml.

/** * Obtiene el cambio de libras de un documento xml * * @return La cantidad de libras obtenido */ public float leerLibras(){ // CAMPOS ////////////////////////////////////////////////////// XmlResourceParser xml; int evento; float libras = 0; // Almacena la cantidad de cambio de libras // FIN CAMPOS /////////////////////////////////////////////////// // EJECUCIÓN //////////////////////////////////////////////////// try { xml = getResources().getXml(idRecurso); evento = xml.getEventType(); // Recorre todo el documento xml while (evento != XmlPullParser.END_DOCUMENT){ // Comprueba el evento producido switch (evento) { // Comprueba si está en el inicio de una etiqueta case XmlPullParser.START_TAG: // Comprueba el nombre de la etiqueta if (xml.getName().equals("libra")){ // Si es correcto ... // Obtiene el cambio xml.next(); libras = Float.parseFloat(xml.getText()); } break; } // Avanza una posición en el xml evento = xml.next(); } } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return libras; // FIN EJECUCIÓN //////////////////////////////////////////////// }

7. Creamos el método que obtiene el cambio de yenes del documento xml.

/** * Obtiene el cambio de yenes de un documento xml * * @return La cantidad de yenes obtenido */ public float leerYenes(){ // CAMPOS ////////////////////////////////////////////////////// XmlResourceParser xml; int evento; float yenes = 0; // Almacena la cantidad de cambio de yenes // FIN CAMPOS /////////////////////////////////////////////////// // EJECUCIÓN //////////////////////////////////////////////////// try { xml = getResources().getXml(idRecurso); evento = xml.getEventType(); // Recorre todo el documento xml while (evento != XmlPullParser.END_DOCUMENT){ // Comprueba el evento producido switch (evento) { // Comprueba si está en el inicio de una etiqueta case XmlPullParser.START_TAG: // Comprueba el nombre de la etiqueta if (xml.getName().equals("yen")){ // Si es correcto ... // Obtiene el cambio xml.next(); yenes = Float.parseFloat(xml.getText()); } break; } // Avanza una posición en el xml evento = xml.next(); } } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return yenes; // FIN EJECUCIÓN //////////////////////////////////////////////// }

8. Finalmente creamos el método que va a mostrar al usuario todos los datos obtenidos de los anteriores métodos.

/** * Muestra el cambio de euros a diferentes monedas */ public void mostrarDatos(){ // CAMPOS /////////////////////////////////////////////////////////// float euros; // Almacena los euros introducido por el usuario float dolares; // Almacena el cambio a dólares float libras; // Almacena el cambio a libras float yenes; // Almacena el cambio a llenes // FIN CAMPOS /////////////////////////////////////////////////////// // EJECUCIÓN //////////////////////////////////////////////////////// try { // Obtiene los euros introducido por el usuario euros = Float.parseFloat(edtxtEuros.getText().toString()); } catch (NumberFormatException e) { // Si la conversión no es correcta ... // Informa al usuario de que no se ha introducido un valor correcto Toast.makeText(getApplicationContext(), "No se ha introducido un valor correcto", Toast.LENGTH_SHORT).show(); // Se toma como valor por defecto 0 euros = 0; // Muestra al usuario el número que se ha tomado por defecto edtxtEuros.setText("0"); } // Obtiene el cambio a dólares dolares = euros * leerDolares(); // Obtiene el cambio a libras libras = euros * leerLibras(); // Obtiene el cambio a llenes yenes = euros * leerYenes(); // Muestra los datos txtDolares.setText(String.valueOf(dolares)); txtLibras.setText(String.valueOf(libras)); txtYenes.setText(String.valueOf(yenes)); // FIN EJECUCIÓN //////////////////////////////////////////////////// }


FIN