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.
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:
Nombre los controles: La estructura de la Outline y los nombres de los controles es la siguiente:
Librerías adicionales
· Ksoap2
Agregando el permiso para usuarios de internet
Esto se realiza en el Android Manifest
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