Gestion des exceptions (erreurs)

Exemple Try Catch

  static void TestTry() {  
     List list = new ArrayList();  
     list.add(3);  
     list.add(5);  
     list.add(0);  
     try{  
       Log.d("TestListe", "A list element is: "+list.get(7));  
     }catch(IndexOutOfBoundsException e){  
       e.printStackTrace();  
     }finally {  
       Log.d("TestListe", "Traitement final...");  
     }  
   }  

Dans le cas d’une exception inconnue : UncaughtExceptionHandler : Store Log to SD-Card or to Email with some debug information to the developer. For E-mail you need to uncomment code inside « showAlertToReport »

 package com.andrologiciels.androtransms;  
 import android.app.AlertDialog;  
 import android.content.Context;  
 import android.content.DialogInterface;  
 import android.content.Intent;  
 import android.content.pm.PackageInfo;  
 import android.content.pm.PackageManager;  
 import android.os.Environment;  
 import android.os.Looper;  
 import android.os.StatFs;  
 import android.util.Log;  
 import android.widget.Toast;  
 import java.io.BufferedWriter;  
 import java.io.File;  
 import java.io.FileNotFoundException;  
 import java.io.FileOutputStream;  
 import java.io.FileWriter;  
 import java.io.IOException;  
 import java.io.OutputStreamWriter;  
 import java.io.PrintWriter;  
 import java.io.StringWriter;  
 import java.io.Writer;  
 import java.lang.Thread.UncaughtExceptionHandler;  
 import java.util.Date;  
 import java.util.Locale;  
 import static android.os.Environment.getExternalStorageDirectory;  
 /**  
  * {@link UncaughtExceptionHandler} Store Log to SD-Card or to Email with some debug information to the developer. For E-mail you need to uncomment  
  * code inside "showAlertToReport"  
  *  
  * @author Azharahmed  
  */  
 @SuppressWarnings("deprecation")  
 public class CustomExceptionHandler implements UncaughtExceptionHandler {  
   // Uncomment to send mail  
   private static Context context1;  
   // private Thread.UncaughtExceptionHandler previousHandler;  
   private Context context;  
   private File logFile;  
   private FileOutputStream stream;  
   private FileWriter crashReport = null;  
   // private static final String RECIPIENT = "psdindia1@gmail.com";  
   public CustomExceptionHandler(Context ctx, String mDirectoryName, String mFileName) {  
     context = ctx;  
     context1 = ctx;  
   }  
   private StatFs getStatFs() {  
     File path = Environment.getDataDirectory();  
     return new StatFs(path.getPath());  
   }  
   private long getAvailableInternalMemorySize(StatFs stat) {  
     long blockSize = stat.getBlockSize();  
     long availableBlocks = stat.getAvailableBlocks();  
     return availableBlocks * blockSize;  
   }  
   private long getTotalInternalMemorySize(StatFs stat) {  
     long blockSize = stat.getBlockSize();  
     long totalBlocks = stat.getBlockCount();  
     return totalBlocks * blockSize;  
   }  
   private void addInformation(StringBuilder message) {  
     message.append("Locale: ").append(Locale.getDefault()).append('\n');  
     try {  
       PackageManager pm = context.getPackageManager();  
       PackageInfo pi;  
       pi = pm.getPackageInfo(context.getPackageName(), 0);  
       message.append("Version: ").append(pi.versionName).append('\n');  
       message.append("Package: ").append(pi.packageName).append('\n');  
     } catch (Exception e) {  
       Log.e("ServiceSMS", "Error", e);  
       message.append("Could not get Version information for ").append(context.getPackageName());  
     }  
     message.append("Phone Model: ").append(android.os.Build.MODEL).append('\n');  
     message.append("Android Version: ").append(android.os.Build.VERSION.RELEASE).append('\n');  
     message.append("Board: ").append(android.os.Build.BOARD).append('\n');  
     message.append("Brand: ").append(android.os.Build.BRAND).append('\n');  
     message.append("Device: ").append(android.os.Build.DEVICE).append('\n');  
     message.append("Host: ").append(android.os.Build.HOST).append('\n');  
     message.append("ID: ").append(android.os.Build.ID).append('\n');  
     message.append("Model: ").append(android.os.Build.MODEL).append('\n');  
     message.append("Product: ").append(android.os.Build.PRODUCT).append('\n');  
     message.append("Type: ").append(android.os.Build.TYPE).append('\n');  
     StatFs stat = getStatFs();  
     message.append("Total Internal memory: ").append(getTotalInternalMemorySize(stat)).append('\n');  
     message.append("Available Internal memory: ").append(getAvailableInternalMemorySize(stat)).append('\n');  
   }  
   public void uncaughtException(Thread t, Throwable mThrowableException) {  
     try {  
       StringBuilder report = new StringBuilder();  
       Date curDate = new Date();  
       report.append("Error Report collected on : ").append(curDate.toString()).append('\n').append('\n');  
       report.append("Informations :").append('\n');  
       addInformation(report);  
       report.append('\n').append('\n');  
       report.append("Stack:\n");  
       final Writer result = new StringWriter();  
       final PrintWriter printWriter = new PrintWriter(result);  
       // Exception will write all stack trace to string builder  
       mThrowableException.printStackTrace(printWriter);  
       report.append(result.toString());  
       printWriter.close();  
       report.append('\n');  
       report.append("**** End of current Report ***");  
       //Log.e("ServiceSMS", "Error while sendErrorMail" + report);  
       //showAlertToReport(report);  
       // ------- Write Crash Report to External Storage  
       writeFile(report.toString());  
       Log.e("ServiceSMS", "ERROR : " + report);  
       // Pass Activity to open  
       /*  
       Intent mIntent = new Intent(context1, MainActivity.class);  
       context1.startActivity(mIntent);  
       */  
       System.exit(0);  
     } catch (Throwable ignore) {  
       // Log.e(UnCaughtException.class.getName(), "Error while sending error e-mail", ignore);  
     }  
     // previousHandler.uncaughtException(t, e);  
   }  
   /**  
    * This method for call alert dialog when application crashed!  
    */  
   public void showAlertToReport(final StringBuilder errorContent) {  
     final AlertDialog.Builder builder = new AlertDialog.Builder(context);  
     new Thread() {  
       @Override  
       public void run() {  
         Looper.prepare();  
         builder.setTitle(context.getApplicationInfo().getClass().getName());  
         builder.setMessage("Application crash report is saved");  
         builder.create();  
         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {  
           @Override  
           public void onClick(DialogInterface dialog, int which) {  
             System.exit(0);  
           }  
         });  
         builder.setPositiveButton("Report", new DialogInterface.OnClickListener() {  
           @Override  
           public void onClick(DialogInterface dialog, int which) {  
             // ------- Write Crash Report to External Storage  
             try {  
               System.out.println(errorContent.toString());  
               BufferedWriter buf = new BufferedWriter(crashReport);  
               try {  
                 buf.write(errorContent.toString());  
               } catch (Exception e) {  
                 e.printStackTrace();  
               } finally {  
                 buf.flush();  
                 buf.close();  
               }  
             } catch (Exception ex) {  
               Log.e("ServiceSMS", "IO ERROR", ex);  
             }  
             // ------- Uncomment to send mail of Error Log  
             // Intent sendIntent = new Intent(Intent.ACTION_SEND);  
             // String subject = "Your App is crassing, Please fix it!";  
             // StringBuilder body = new StringBuilder("Error Log : ");  
             // body.append('\n').append('\n');  
             // body.append(errorContent).append('\n').append('\n');  
             // // sendIntent.setType("text/plain");  
             // sendIntent.setType("message/rfc822");  
             // sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { RECIPIENT });  
             // sendIntent.putExtra(Intent.EXTRA_TEXT, body.toString());  
             // sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);  
             // sendIntent.setType("message/rfc822");  
             // // context.startActivity(Intent.createChooser(sendIntent, "Error Report"));  
             // context1.startActivity(sendIntent);  
             System.exit(0);  
           }  
         });  
         builder.setMessage("Unfortunately,This application has stopped");  
         builder.show();  
         Looper.loop();  
       }  
     }.start();  
   }  
   ///////////////////////////  
   private void writeFile(String data) {  
     String fileName = "AAA_logfic.txt";  
     File extStore = Environment.getExternalStorageDirectory();  
     // ==> /storage/emulated/0/note.txt  
     String path = extStore.getAbsolutePath() + "/memtmp/" + fileName;  
     Log.i("ExternalStorageDemo", "Save to: " + path);  
     try {  
       File myFile = new File(path);  
       myFile.createNewFile();  
       FileOutputStream fOut = new FileOutputStream(myFile);  
       OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);  
       myOutWriter.append(data);  
       myOutWriter.close();  
       fOut.close();  
     } catch (Exception e) {  
       e.printStackTrace();  
     }  
   }  
   /////////////////  
 }  

 

http://www.siteduzero.com/informatique/tutoriels/apprenez-a-programmer-en-java/le-bloc-try-catch

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :