Vamos a programar #5 - Calculadora de resistencias para android.


Terminando lo anterior

El dia de hoy vamos a terminar de hacer una aplicacion para android que nos ayudara a obtener el valor de una resistencia basado en los colores que está posea.
En el post anterior vimos como implementar la interfaz.

Asi que ahora nos vamos a ocupar del código que hace funcionar las cosas.

Terminando la interfaz.

Para los datos que van a tener los controles Spinner, decidí cargarlos desde los recursos, Para eso en el panel "Project" buscaremos la siguiente ruta: app>res>values>strings.xml lo abriremos agregaremos entre las etiquetas <resources></resources> el siguiente codigo:

<resources>
    <string name="app_name">Calculador de resistencias</string>
    <string-array name="Colores1">
        <item>Negro</item>
        <item>cafe</item>
        <item>Rojo</item>
        <item>Naranja</item>
        <item>Amarillo</item>
        <item>Verde</item>
        <item>Azul</item>
        <item>Violeta</item>
        <item>Gris</item>
        <item>Blanco</item>
    </string-array>
    <string-array name="Colores2">
        <item>Dorado</item>
        <item>Plata</item>
    </string-array>
</resources>


Ahora solo queda implementar el codigo en java. lo puedes copiar asi como está en app>java
com.mdev.claculadoraderesistencia>mainactivity.java, se incluyen los comentarios pertinentes para poder implementarlo

package com.mdev.rcalc.calculadoraderesistencias;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import static java.lang.Math.pow;

public class MainActivity extends AppCompatActivity {
 //Spinners
 Spinner SpnC1,SpnC2,SpnC3,SpnC4;
 //Boton
 Button BtnCallIt;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  BtnCallIt = (Button)findViewById(R.id.BtnCalculateIt);
  //En esta seccion llenamos los Spinners con los datos de los recursos.
  //Asociamos los controles del layput a nustras variables de control (spinner)
  SpnC1 = (Spinner)findViewById(R.id.SpnColor1);
  SpnC2 = (Spinner)findViewById(R.id.SpnColor2);
  SpnC3 = (Spinner)findViewById(R.id.SpnColor3);
  //Usamos el mismo adaptador para los primeros 3 ya que contienen los mismos datos.
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
    R.array.Colores1, android.R.layout.simple_spinner_item);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  //Asignamos el contenido del adaptador a nuestros controles
  SpnC1.setAdapter(adapter);
  SpnC2.setAdapter(adapter);
  SpnC3.setAdapter(adapter);
  //Hacemos lo mismo para el cuarto, pero aqui usamos el recurso "Colores2" que contiene los
  //datos para la cuarta franja, solo en este caso.
  SpnC4 = (Spinner)findViewById(R.id.SpnColor4);
  ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
    R.array.Colores2, android.R.layout.simple_spinner_item);
  adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  SpnC4.setAdapter(adapter2);
  //Creamos el handler para el evento click
  BtnCallIt.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view)
   {
   //Usamos la funcion ShowDialog para mostrar el resultado
   ShowDialog("El Resultado es:",BuildNumber(SpnC1.getSelectedItemPosition(),SpnC2.getSelectedItemPosition(),
       SpnC3.getSelectedItemPosition())+" "+GetTolerance(SpnC4.getSelectedItemPosition()));
   }
  });
 }
 //Mostrar dialog de manera sencilla
 private void ShowDialog(String Title, String Caption)
 {
  new AlertDialog.Builder(this)
    .setTitle(Title)
    .setMessage(Caption)
    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int which) {
      // algo
     }
    })
    .setIcon(android.R.drawable.ic_menu_info_details)
    .show();
 }
 //Funcion para obtener la toleranacia de la resistencia
 private String GetTolerance(int Value)
 {
  if (Value == 0)
   return "+5% de tolerancia";
  else
   return "+10% de tolerancia";
 }
 //Funcion para generar el valor de la resistencia basado en sus colores
 private String BuildNumber(int Value1, int Value2, int Value3)
 {
  String Significant;
  //Los manejo en string para solo concatenarlos obtener el valor
  Significant = Integer.toString(Value1) + Integer.toString(Value2);
  //Convertimos el valor a uno numerico y lo multiplicamos a la potencia de 10
  double Resultado = Integer.parseInt(Significant)*pow(10,Value3);
  //Para regresar el valor en KΩ
  if (Resultado/1000 >= 1 && Resultado/1e3 < 1000 )
  {
   return (String.valueOf(Resultado / 1e3) + "KΩ");
  }
  //Para regresar el valor en MΩ
  if (Resultado/1e6 >= 1)
  {
   return (String.valueOf(Resultado / 1e6) + "MΩ");
  }else{
   //Regresamos el valor en Ω
   return (String.valueOf(Resultado)+"Ω");
  }

 }
}



Al implementar la aplicacion y correrla se obtiene lo anterior, como lo dije esto solo es ilustrativo, no es para aprender a prgramar, pero si tienes dudas no dudes en preguntar.
Por sí se ofrece, el proyecto entero lo puedes descargar aquí, lo puedes importar completo para ver como funciona.
Los leo luego

6 comentarios

  1. Las tolerancias no se muestran cuando haces los calculos

    ResponderBorrar
  2. como puedo hacer para mostrar las tolerancias

    ResponderBorrar
    Respuestas
    1. La manera más simple es tomar el valor del spinner que las contiene, en este caso es el spinner4 (Spnc4) y hacer una comparación, al solo tener dos valores posibles, si es 0 equivale al 5% de tolerancia, si es 1 es equivalente al 10%. El código ya está actualizado y lo he puesto todo para que lo descargues.

      Borrar
  3. Respuestas
    1. Son números en notación científica, 1e3 = 1000 y 1e6 es 1000000. Recuerda que el prefijo mega (M) es un millón y el prefijo kilo (k) es mil, en el código puedes cambiarlo por su equivalente y funcionaria igual. Saludos.

      Borrar