En este tutorial vamos a crear una aplicación que nos permita obtener el cambio de monedas tanto de dólares como de euros utilizando el cambio obtenido de un fichero xml desde la red.
Para ello la aplicación tendrá que obtener desde internet un fichero xml en donde se encuentran todos los cambios de las monedas y obtener el valor del cambio de dólares a euros que se encuentra en el fichero.
Espero que os guste y os resulte fácil. 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 la interfaz de la actividad principal en donde se le dará la opción al usuario de realizar el cambio de dólares a euros o de euros a dólares, 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:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:orientation="vertical" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/euros" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/edtxtEuros" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" > <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/dolares" android:textAppearance="?android:attr/textAppearanceMedium" /> <EditText android:id="@+id/edtxtDolares" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" /> <ToggleButton android:id="@+id/tglbTipoConversion" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ToggleButton" android:textOff="@string/eurosADolares" android:textOn="@string/DolaresAEuros" /> <Button android:id="@+id/btnConvertir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:gravity="center" android:text="@string/Convertir" /> </LinearLayout> </RelativeLayout>
2. Definimos los campos de la actividad principal, que será la clase que maneja la actividad principal.
/** * Convierte los dólares a euros y viceversa con el cambio obtenido * desde un fichero xml que se encuentra en la red * * @author José Miguel Acosta Martín * */ public class ConversorActivity extends Activity { /////////////////////////////////////////////////////////////////////////////////////////////////// // CAMPOS // /////////////////////////////////////////////////////////////////////////////////////////////////// // Campos gráficos private EditText edtxtEuros; // Campo gráfico donde el usuario puede introducir la cantidad en euros private EditText edtxtDolares; // Campo gráfico donde el usuario puede introducir la cantidad en dólares private ToggleButton tglbTipoConversion; // Campo gráfico donde el usuario puede elegir el tipo de cambio private Button btnConvertir; // Campo gráfico que permite al usuario comenzar la conversión // Otros campos private URL url; // Almacena la url donde se encuentra el valor del cambio private float cambio; // Almacena el cambio /////////////////////////////////////////////////////////////////////////////////////////////////// // FIN CAMPOS // ///////////////////////////////////////////////////////////////////////////////////////////////////
3. Creamos el método que nos permitirá leer el cambio desde internet, la url que se utiliza para obtener el valor del cambio es la siguiente: "http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml"
/** * Lee el cambio del fichero xml que se encuentra en la red * @return */ public float leerCambio(){ // CAMPOS //////////////////////////////////////////////////////////////////////////////////////// float cambio; // Almacena el cambio obtenido XmlPullParserFactory factory; XmlPullParser xml; // Almacena el recurso xml int evento; // Guarda el evento producido // FIN CAMPOS //////////////////////////////////////////////////////////////////////////////////// // EJECUCIÓN ////////////////////////////////////////////////////////////////////////////////////// // Inicia el cambio cambio = 0; try { // Obtiene el fichero xml factory = XmlPullParserFactory.newInstance(); xml = factory.newPullParser(); xml.setInput(url.openStream(), "UTF-8"); // Obtiene el evento producido evento = xml.getEventType(); // Recorre el fichero xml while(evento != XmlPullParser.END_DOCUMENT){ switch (evento) { case XmlPullParser.START_TAG: if (xml.getName().equals("Cube")){ if (xml.getAttributeCount() > 1){ if (xml.getAttributeValue(0).equals("USD")){ // Obtiene el cambio cambio = Float.parseFloat(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(); } return cambio; // FIN EJECUCIÓN ////////////////////////////////////////////////////////////////////////////////// }
4. En el método onCreate() de la actividad principal inicializamos todos los campos y declaramos los eventos de los botones además de programar su comportamiento, también tendremos que programar el cambió en función de la opción elegida por el usuario.
/** * Al iniciar la actividad ... */ @SuppressLint({ "NewApi", "NewApi", "NewApi" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversor); // INCIALIZACIÓN CAMPOS ////////////////////////////////////////////////////////////////////// // Inicialización de campos gráficos edtxtEuros = (EditText) findViewById(R.id.edtxtEuros); edtxtDolares = (EditText) findViewById(R.id.edtxtDolares); tglbTipoConversion = (ToggleButton) findViewById(R.id.tglbTipoConversion); btnConvertir = (Button) findViewById(R.id.btnConvertir); // Inicialización de otros campos try { url = new URL("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml"); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } // FIN INICIALIZACIÓN CAMPOS ////////////////////////////////////////////////////////////////// // Permisos para poder acceder a internet StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); btnConvertir.setOnClickListener(new OnClickListener() { /** * Realiza la conversión deseada */ public void onClick(View v) { // CAMPOS ///////////////////////////////////////////////////////////////////////////////////// float euros; // Almacena los euros introducidos por el usuario float dolares; // Almacena los dólares introducidos por el usuario // FIN CAMPOS ///////////////////////////////////////////////////////////////////////////////// // EJECUCIÓN ////////////////////////////////////////////////////////////////////////////////// // Obtiene el cambio del fichero xml cambio = leerCambio(); // Informa al usuario del valor del cambio Toast.makeText(getApplicationContext(), "Cambio a: " + cambio, Toast.LENGTH_LONG).show(); // Comprueba que los valores se han introducido correctamente try { euros = Float.parseFloat(edtxtEuros.getText().toString()); } catch (NumberFormatException e) { euros = 0; edtxtEuros.setText("0"); } try { dolares = Float.parseFloat(edtxtDolares.getText().toString()); } catch (NumberFormatException e) { dolares = 0; edtxtDolares.setText("0"); } // Según la opción marcada por el usuario if (tglbTipoConversion.isChecked()){ // Se convierte los dólares a euros edtxtEuros.setText(String.valueOf(dolares * cambio)); } else{ // Se convierte los euros a dólares edtxtDolares.setText(String.valueOf(euros / cambio)); } } }); // FIN EJECUCIÓN ///////////////////////////////////////////////////////////////////////////////// }
<uses-permission
android:name="android.permission.INTERNET" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ACDAT.ejercicio9" 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=".ConversorActivity" android:label="@string/title_activity_conversor" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
FIN
No hay comentarios:
Publicar un comentario