Bienvenidos sean a este post, en el post de hoy hablaremos sobre como manejar los errores en nuestro codigo.
Cuando hablamos de errores en Java o derivados de C los mismos no se llaman de esta forma sino son llamados Excepciones y estas son manipuladas por un conjunto de funciones llamadas try y catch, su sintaxis es la siguiente:
try
{
... instrucciones ...
}
catch (excepcion)
{
... instrucciones ...
}
finally
{
... instrucciones ...
}
En try ira el codigo que queremos inspeccionar, es decir el codigo de nuestro programa, el bloque del try siempre debe ir seguido de al menos un bloque catch, el bloque catch sera el encargado de manejar la excepcion pero que es una excepcion? Una excepcion es la forma que tiene el lenguaje de interceptar los errores y poder manipularlos, en este caso en el bloque catch podremos usar nuestras propias instrucciones para manipular el error, ya sea desde cambiar la notificacion hasta poder manejar el error y seguir con nuestro codigo sin mayores sobresaltos, bloques catch podemos tener todos los que necesitemos, haciendo una comparacion equivaldria al case de switch y al elseif de if, y por ultimo va un finally donde pondremos unas instrucciones que ejecutara al final de todo este proceso, al igual que else o default no puede haber mas de uno, siempre va al final y tambien es opcional.
Para entenderlo mejor vamos a crear el siguiente proyecto:
- Dispositivos: Phone and Tablet
- Actividad: Empty Activity
- Nombre: Excepciones
- Nombre de paquete: org.example.excepciones
- API Minimo: API 14 (Android 4.0)
Una vez generado nuestro proyecto modificaremos el archivo activity_main.xml con el siguiente codigo:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/numero"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="Ingresa un valor" />
<EditText
android:id="@+id/divisor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="Ingresa un divisor"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Calcular"
android:onClick="calcular" />
<TextView
android:id="@+id/resultado"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
En este archivo vamos a tener un layout lineal simple donde tendremos dos campos para ingresar un valor y otro para dividir al anterior, luego tendremos un boton el cual llamara a un metodo llamado calcular cuando hagamos click pero por ahora nos devolvera un error porque esta funcion aun no existe, luego tendremos un elemento de tipo TextView que usaremos para mostrar el resultado de la division, en este caso identificamos a cada uno de los elementos de tipo Text, con esto explicado pasemos a modificar el codigo de MainActivity con el siguiente codigo:
MainActivity.java
package org.example.excepciones;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText numero;
private EditText divisor;
private TextView resultado;
private float total;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void calcular(View vista){
numero = (EditText) findViewById(R.id.numero);
divisor = (EditText) findViewById(R.id.divisor);
resultado = (TextView) findViewById(R.id.resultado);
total = Integer.parseInt(numero.getText().toString()) /
Integer.parseInt(divisor.getText().toString());
resultado.setText("" + total);
}
}
Con este codigo primero crearemos tres objetos: dos de tipo EditText para obtener a numero y a divisor y otro de tipo TextView el cual sera para resultado, estos objetos los usaremos para crear el enlace entre el codigo de nuestro layout y el de Java, despues tendremos una variable de tipo float llamada total, nuestro siguiente metodo sera onCreate para generar la vista de nuestro layout, despues tendremos la funcion que necesitamos para corregir el error en el boton, para ello veamos esta funcion:
public void calcular(View vista){
numero = (EditText) findViewById(R.id.numero);
divisor = (EditText) findViewById(R.id.divisor);
resultado = (TextView) findViewById(R.id.resultado);
total = Integer.parseInt(numero.getText().toString()) /
Integer.parseInt(divisor.getText().toString());
resultado.setText("" + total);
}
El argumento vista es necesario para identificar en que vista es, despues crearemos el verdadero enlace entre nuestros objetos numero, divisor y resultado con los elementos del layout llamados iguales, no es obligatorio pero es mas practico de reconocer, despues calcularemos la division entre numero y divisor, para ello utilizaremos getText y toString para extraer el valor ingresado en los elementos numero y divisor para despues por medio del metodo parseInt de la clase Integer convertiremos ese dato en tipo int, una vez obtenidos estos valores los dividiremos entre si y lo asignaremos a total, por ultimo asignaremos el valor a resultado pero le pondremos las comillas adelante para convertir este valor a string, con esto podremos probarlo y veamos que sucede mediante el siguiente video
En este caso nuestra aplicacion funciona de manera correcta pero se cerrara cuando lo dividamos por cero, para evitar esto modificaremos a calcular de la siguiente manera:
public void calcular(View vista){
try {
numero = (EditText) findViewById(R.id.numero);
divisor = (EditText) findViewById(R.id.divisor);
resultado = (TextView) findViewById(R.id.resultado);
total = Integer.parseInt(numero.getText().toString()) /
Integer.parseInt(divisor.getText().toString());
resultado.setText("" + total);
} catch (Exception n) {
resultado.setText("No puedes dividirlo por cero");
}
}
En este caso le agregamos un bloque try y luego por medio de un catch donde usamos a Exception y en este caso escribira en resultado el mensaje de que no puedes dividirlo por cero, compilemos nuevamente y veamos como funciona ahora mediante el siguiente video
Ahora en el video podemos ver como el programa funciona correctamente, inclusive cuando dividimos por cero y nos notifica que no debemos hacerlo y despues sigue funcionando como si nada hubiera pasado, veamos como quedo nuestro codigo final:
MainActivity.java
package org.example.excepciones;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText numero;
private EditText divisor;
private TextView resultado;
private float total;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void calcular(View vista){
try {
numero = (EditText) findViewById(R.id.numero);
divisor = (EditText) findViewById(R.id.divisor);
resultado = (TextView) findViewById(R.id.resultado);
total = Integer.parseInt(numero.getText().toString()) /
Integer.parseInt(divisor.getText().toString());
resultado.setText("" + total);
} catch (Exception n) {
resultado.setText("No puedes dividirlo por cero");
}
}
}
Nota: Si desean saber mas sobre como se manejan las excepciones en Java les recomiendo este post.
En resumen, hoy hemos visto de una manera muy superficial como son las excepciones, que son en realidad, como es la sintaxis para poder manejar a las mismas, como nos benefician, una breve explicacion de porque son excepciones y no errores, un ejemplo simple donde ponerlo en practica y como nos ayuda con nuestros programas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar
Es para mantenimiento del sitio, gracias!
$1.00