miércoles, 17 de julio de 2013

Aplicación móvil para una tienda en cambio

Ing. Abraham  Sopla Maslucán

Lima – Perú

Problema

Se requiere usar un web service para crear una aplicación móvil para Android que  permita calcular el valor de un monto de dinero dado en cierto tipo de moneda a otro tipo de moneda.

 

Solución

La solución nos exige el un servicio web, para que los valores de cambio sean totalmente actualizados en el momento que se desea hacer el cambio. Por eso usaremos la información de  la siguiente ruta: http://www.webservicex.net/ws/WSDetails.aspx?CATID=2&WSID=10, se subrayan los parámetros que se usaran en la aplicación.  

clip_image002[4]

 

Al invocar el servicio se recibe, en este caso específico, el tipo de cambio de un dólar en soles.

<double xmlns="http://www.webserviceX.NET/">2.7645</double>

 

Creación del proyecto

Crear un nuevo proyecto con las especificaciones de la siguiente tabla, use el SDK 3.0 como mínimo:

Application Name

Cambio

Project Name

Cambio

Package Name

com.soplaingenieros.cambio

 

Una actividad en blanco con las siguientes especificaciones:

Activity Name

MainActivity

Layout Name

activity_main

Navigation Type

none

 

Actividad

activity_main.xml

En el layout de la actividad 1 (activity_actividad1) agregue los widgets para construir la siguiente interfaz:

clip_image004[4]

Nombre los controles: La estructura de la Outline y los nombres de los controles es la siguiente:

clip_image006[4]

Librerías adicionales

·         Ksoap2

Agregando el permiso para usuarios de internet

Esto se realiza en el Android Manifest

clip_image008[4]

Programación

MainActivity.java

package com.soplaingenieros.cambio;

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.PropertyInfo;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapPrimitive;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

 

import android.os.Bundle;

import android.os.StrictMode;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

 

public class MainActivity extends Activity {

      private static final String SOAP_ACTION = "http://www.webserviceX.NET/ConversionRate";

      private static final String NAME_SPACE = "http://www.webserviceX.NET/";

      private static final String URL = "http://www.webservicex.net/CurrencyConvertor.asmx";

      private static final String METHOD_NAME = "ConversionRate";

     

      // Controles

      private EditText etImporte;

      private EditText etDe;

      private EditText etA;

      private TextView tvResultado;

 

      @Override

      protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            // Si se trata de Android versión 3 o superior

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()

                        .permitAll().build();

            StrictMode.setThreadPolicy(policy);

            // Controles

            etImporte = (EditText) findViewById(R.id.ccEtImporte);

            etDe = (EditText) findViewById(R.id.ccEtDe);

            etA = (EditText) findViewById(R.id.ccEtA);

 

      }

 

      public void onClickConsultar(View view) {

            try {

                  // Datos

 

                  // String cant = etImporte.getText().toString();

                  String de = etDe.getText().toString();

                  String a = etA.getText().toString();

                  // Objeto SOAP

                  SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME);

 

                  // Propiedad DE

                  PropertyInfo propDe = new PropertyInfo();

                  propDe.setName("FromCurrency");

                  propDe.setValue(de);

                  request.addProperty(propDe);

                  // Propiedad A

                  PropertyInfo propA = new PropertyInfo();

                  propA.setName("ToCurrency");

                  propA.setValue(a);

                  request.addProperty(propA);

                  // Ejecución

                  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(

                             SoapEnvelope.VER11);

                  envelope.dotNet = true;

                  envelope.setOutputSoapObject(request);

                  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

                  androidHttpTransport.call(SOAP_ACTION, envelope);

                  SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

 

                  // Obtener respuesta

 

                  Double importe = Double.valueOf(etImporte.getText().toString());

                  Double resultado = Double.valueOf(response.toString()) * importe;

                  tvResultado = (TextView) findViewById(R.id.ccTvRespuesta);

                  tvResultado.setText(String.valueOf(resultado));

 

            } catch (Exception e) {

                  e.printStackTrace();

                  Toast.makeText(getApplicationContext(), e.getMessage(),

                             Toast.LENGTH_LONG).show();

            }

      }

}

 

Pruebas y resultados

En este caso se hacen dos pruebas de la aplicación, primero, pasamos 56800 dólares americanos a soles, siendo el resultado 156681.6. En el segundo caso, pasamos 38890 soles a euros. Convierta usted 270 dólares americanos a euros. Aquí te mostramos algunas tipos de monedas con las que podría probar en la aplicación móvil, use las letras en mayúsculas antes del símbolo “-”, por ejemplo PEN, EUR, XPT.

XPF-Pacific Franc
PKR-Pakistani Rupee
XPD-Palladium Ounces
PAB-Panama Balboa
PGK-Papua New Guinea Kina
PYG-Paraguayan Guarani
PEN-Peruvian Nuevo Sol
PHP-Philippine Peso
XPT-Platinum Ounces

 

clip_image010[4]clip_image012[4]

1 comentario: