Advanced exception handling in Android


SDK Version: 
M3

errorIn this tutorial I'll present you a simple exception handler class for Android. The class can invoke and display exceptions and it can be upgraded very easy for your further needs.

First of all, I created a simple class called ExceptionHandler. It has three static methods, two public and a private.

See the code below:

  1. import android.app.AlertDialog;
  2. import android.content.Context;
  3. import android.content.DialogInterface;
  4.  
  5. public class ExceptionHandler {
  6.  
  7.         public static void makeExceptionAlert(Context context, Exception ex) {
  8.                 String headerText = "";
  9.                 String messageText = "";
  10.  
  11.                 if (ex instanceof ArrayIndexOutOfBoundsException) {
  12.                         headerText = context.getText(R.string.error).toString();
  13.                         messageText = context.getText(
  14.                                         R.string.ArrayIndexOutOfBoundsException).toString();
  15.                 } else if (ex instanceof ClassNotFoundException) {
  16.                         headerText = context.getText(R.string.error).toString();
  17.                         messageText = context.getText(R.string.ClassNotFoundException)
  18.                                         .toString();
  19.                 } else if (ex instanceof IndexOutOfBoundsException) {
  20.                         headerText = context.getText(R.string.error).toString();
  21.                         messageText = context.getText(R.string.IndexOutOfBoundsException)
  22.                                         .toString();
  23.                 } else if (ex instanceof NullPointerException) {
  24.                         headerText = context.getText(R.string.error).toString();
  25.                         messageText = context.getText(R.string.NullPointerException)
  26.                                         .toString();
  27.                 } else if (ex instanceof NumberFormatException) {
  28.                         headerText = context.getText(R.string.error).toString();
  29.                         messageText = context.getText(R.string.NumberFormatException)
  30.                                         .toString();
  31.                 } else if (ex instanceof RuntimeException) {
  32.                         headerText = context.getText(R.string.error).toString();
  33.                         messageText = context.getText(R.string.RuntimeException).toString();
  34.                 } else {
  35.                         headerText = context.getText(R.string.error).toString();
  36.                         messageText = context.getText(R.string.Exception).toString();
  37.                 }
  38.                 showErrorDialog(context, headerText, messageText);
  39.         }
  40.  
  41.         private static void showErrorDialog(Context context, String titletext,
  42.                         String messagetext) {
  43.                 new AlertDialog.Builder(context)
  44.                                 .setIcon(android.R.drawable.ic_dialog_alert)
  45.                                 .setTitle(titletext)
  46.                                 .setMessage(messagetext)
  47.                                 .setPositiveButton(R.string.error_close,
  48.                                                 new DialogInterface.OnClickListener() {
  49.  
  50.                                                         @Override
  51.                                                         public void onClick(DialogInterface dialog,
  52.                                                                         int which) {
  53.                                                         }
  54.  
  55.                                                 }).show();
  56.         }
  57.  
  58.         public static void exceptionThrower(Exception ex) throws Exception {
  59.                 if (ex != null) {
  60.                         if (ex instanceof ArrayIndexOutOfBoundsException) {
  61.                                 throw (ArrayIndexOutOfBoundsException) ex;
  62.                         } else if (ex instanceof ClassNotFoundException) {
  63.                                 throw (ClassNotFoundException) ex;
  64.                         } else if (ex instanceof IndexOutOfBoundsException) {
  65.                                 throw (IndexOutOfBoundsException) ex;
  66.                         } else if (ex instanceof NullPointerException) {
  67.                                 throw (NullPointerException) ex;
  68.                         } else if (ex instanceof NumberFormatException) {
  69.                                 throw (NumberFormatException) ex;
  70.                         } else if (ex instanceof RuntimeException) {
  71.                                 throw (RuntimeException) ex;
  72.                         } else {
  73.                                 throw (Exception) ex;
  74.                         }
  75.                 }
  76.         }
  77. }

The exceptionThrower and the ExceptionAlert methods can be upgraded with any exceptions you want to use.

The code to use:

  1. try {
  2. ExceptionHandler.exceptionThrower(new ArrayIndexOutOfBoundsException());
  3.                 } catch (Exception e) {
  4.                         ExceptionHandler.makeExceptionAlert(Main.this, e);
  5.                 }

As you can see, you only need to call exceptionThrower with an exception, then just give the exception to the makeExceptionAlert method in the catch block.
The class will show the exceptions alert:

er