Android Currency Converter Example
Hola amigos este tutorial es sobre conversión de divisas cambiar una moneda a otra. En este ejemplo utilizaremos una Public API Currency Converter de la siguiente pagina. Teniendo lista nuestra lectura podrán continuar. Este ejemplo utiliza un WebService aunque también pueden crear su propio Servicio con un poco mas de trabajo.
Crear Proyecto Android (Aquí)
Crearemos un proyecto en Android para el desarrollo de este ejemplo Android Currency Converter Tutorial.
Design Layour Currency Converter
Vamos a crear el diseño de nuestra aplicación para desarrollar nuestro ejemplo.
Cualquier duda que tengas por favor déjanos tu opinión o comentario.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Coversos Divisas"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.016" />
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="De:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.094"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.096" />
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.154" />
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="17dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Resultado"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.108"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.364" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.437" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number"
tools:layout_editor_absoluteX="29dp"
tools:layout_editor_absoluteY="331dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.247" />
<TextView
android:id="@+id/textView6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.058"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.521"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Convertir"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.749" />
</android.support.constraint.ConstraintLayout>
Utilizaremos los diferentes componentes para nuestro ejemplo el diseño quedaría de la siguiente manera.Código MaintActivity Currency Converter Tutorial
Deben tener presente que la pagina que utilizamos para nuestra Android Currency Converter API es la siguiente pueden consultar los diferentes tipos de monedas con las que cuenta para conversión.Android Currency Converter API
https://api.fixer.io
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
// Crear variable con el tipo de moneda por Pais
Currency[] currency ={
new Currency("Euro", "EUR"),
new Currency("Hong Kong Dollar", "HKD"),
new Currency("Honduran Lempira", "HNL"),
new Currency("United States Dollar", "USD"),
new Currency("Venezuelan Bolívar Fuerte", "VEF"),
new Currency("Mexican Peso", "MXN"),
new Currency("Canadian Dollar", "CAD")
};
// Declaración de variables
private String jsonResult;
String divisa, divisa2;
Spinner spinner1, spinner2;
Button btnConvert;
EditText edtCantidad;
TextView txtResultado;
private static String urls = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Obtener la referencia del objeto spinner
spinner1 = (Spinner)findViewById(R.id.spinner);
// Construir los datos en el spinner
MySpinnerAdapter adapter = new MySpinnerAdapter(MainActivity.this, android.R.layout.simple_spinner_item, currency);
spinner1.setAdapter(adapter);
// Evento selección del spinner
spinner1.setOnItemSelectedListener(onItemSelectedListener1);
// Obtener la referencia del objeto spinner
spinner2 = (Spinner)findViewById(R.id.spinner2);
// Construir los datos en el spinner
MySpinnerAdapter adapter2 = new MySpinnerAdapter(MainActivity.this, android.R.layout.simple_spinner_item, currency);
spinner2.setAdapter(adapter2);
// Evento selección del spinner
spinner2.setOnItemSelectedListener(onItemSelectedListener2);
// Obtener la refencia del Button
btnConvert = (Button) findViewById(R.id.button);
btnConvert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Obtener referencia del objeto editText
edtCantidad = (EditText)findViewById(R.id.editText2);
// Asignar el valor a la variable string
String cantidad = edtCantidad.getText().toString();
urls = "https://api.fixer.io/latest?base="+divisa+"&symbols="+divisa2+"&amount="+cantidad+"";
Toast.makeText(getApplicationContext(),urls,Toast.LENGTH_LONG).show();
// Ejecutar la clase asincrona
webService task = new webService();
task.execute();
}
});
}
// Clase asincrona del servicio
private class webService extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String forecastJsonStr = null;
try {
// Asignar la URL de la conexión
URL url = new URL(urls);
// Establece el tipo de conexiòn
urlConnection = (HttpURLConnection) url.openConnection();
// El tipo de conexiòn Get
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
if (inputStream == null) {
return null;
}
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line + "\n");
}
if (buffer.length() == 0) {
return null;
}
forecastJsonStr = buffer.toString();
jsonResult = buffer.toString();
return forecastJsonStr;
} catch (IOException e) {
Log.e("PlaceholderFragment", "Error ", e);
return null;
} finally{
if (urlConnection != null) {
urlConnection.disconnect();
}
if (reader != null) {
try {
reader.close();
} catch (final IOException e) {
Log.e("PlaceholderFragment", "Error closing stream", e);
}
}
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
getResultado();
}
}
// Obtener el resultado
public void getResultado(){
try{
String resDivisa;
// Obtener el valor del arreglo de la devoluciòn
JSONObject reader = new JSONObject(jsonResult);
// Especificar el valor que se necesita
JSONObject rates = reader.getJSONObject("rates");
// Obtener el valor pero en nodo
resDivisa = rates.getString(divisa2);
// Asignar el valor al TextView
txtResultado = (TextView) findViewById(R.id.textView6);
txtResultado.setText(resDivisa);
}catch (Exception e){
}
}
AdapterView.OnItemSelectedListener onItemSelectedListener1 =
new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Currency obj = (Currency)(parent.getItemAtPosition(position));
divisa = String.valueOf(obj.getValue());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
AdapterView.OnItemSelectedListener onItemSelectedListener2 =
new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Currency obj = (Currency)(parent.getItemAtPosition(position));
divisa2 = String.valueOf(obj.getValue());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
// Definicion de la clase Currency
public class Currency{
private String text;
private String value;
public Currency(String text, String value){
this.text = text;
this.value = value;
}
public void setText(String text){
this.text = text;
}
public String getText(){
return this.text;
}
public void setValue(String value){
this.value = value;
}
public String getValue(){
return this.value;
}
}
//custom adapter
public class MySpinnerAdapter extends ArrayAdapter<Currency> {
private Context context;
private Currency[] myObjs;
public MySpinnerAdapter(Context context, int textViewResourceId,
Currency[] myObjs) {
super(context, textViewResourceId, myObjs);
this.context = context;
this.myObjs = myObjs;
}
public int getCount(){
return myObjs.length;
}
public Currency getItem(int position){
return myObjs[position];
}
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs[position].getText());
return label;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs[position].getText());
return label;
}
}
}
Crear Emulador AVD (Aquí)
Ahora para terminar vamos a crear un emulador para ver nuestra aplicación terminada de Converso de Divisas. Y el resultado seria el siguiente.Cualquier duda que tengas por favor déjanos tu opinión o comentario.
No hay comentarios:
Publicar un comentario