Autore Topic: Gestioni eccezioni  (Letto 839 volte)

Offline Vade

  • Nuovo arrivato
  • *
  • Post: 4
    • Mostra profilo
Gestioni eccezioni
« il: 18 Marzo 2015, 16:34:57 CET »
Salve a tutti, mi interesserebbe un tutorial in cui è spiegato in quali casi conviene gestire le eccezioni o se ci sono librerie aggiuntive che permettono di semplificare questo lavoro.

Offline icex93

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Gestioni eccezioni
« Risposta #1 il: 18 Marzo 2015, 19:11:54 CET »
Beh la gestione delle eccezioni è un qualcosa che dipende prettamente dal programmatore e dal codice che ha scritto. Devi soltanto considerare che vengono generate quando si presenta un evento inatteso. Con ciò è facile dedurre che nei casi in cui la genesi di un'eccezione inficia sulla corretta esecuzione del programma,  sarebbe il caso gestirla; se invece è un qualcosa di marginale,  in tal caso puoi anche catturarla ma non gestirla.

Per esempio:
Codice: [Seleziona]
try
{

//Codice che copia un file da un'origine ad una destinazione

}catch(FileNotFoundException fnfe){//generato quando il file di origine non viene trovato (per esempio è stato cancellato da app di terze parti ed ovviamente il programmatore questo bon può prevederlo! )
 
fnfe.printStackStrace();//in genere è buona norma come minimo stampare un log da cui poter capire per quale ragione si è originata l'eccezione

//qui sta a te decidere se gestire o meno,  in base alle esigenze del tuo programma! Puoi anche solo notificare l'utente con un Toast o con una Notification che qualcosa è andato storto e invitarlo a riprovare, magari ricontrollando l'esistenza del file di origine

}

Per quanto riguarda l'esistenza di librerie,  sinceramente non so se c'è qualcosa che semplifichi.  Francamente non penso perché la sintassi di gestione di un'eccezione è davvero molto semplice (è analogo ad un semplice do-while) e soprattutto potente in quanto, come puoi notare dall'esempio,  la stessa eccezione è considerata un oggetto!!!

Offline aacdevelop

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 8.1, Linux Mint
Re:Gestioni eccezioni
« Risposta #2 il: 18 Aprile 2015, 13:09:30 CEST »
Dovresti essere un po' più specifico al riguardo.

In Android è possibile utilizzare la funzione:

Codice (Java): [Seleziona]
Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler handler);
Dove handler é una classe da te implementata (estesa) che definisce cosa fare quando si verifica un'eccezione.

Eg.

Codice (Java): [Seleziona]
public class SolverExceptionHandler implements Thread.UncaughtExceptionHandler {
    private final Activity myContext;
    private final String LINE_SEPARATOR = "\n";


    public SolverExceptionHandler(Activity context) {
        myContext = context;
    }

    @Override
    public void uncaughtException(Thread thread, Throwable exception) {
        StringWriter stackTrace = new StringWriter();
        exception.printStackTrace(new PrintWriter(stackTrace));
        StringBuilder errorReport = new StringBuilder();
        errorReport.append("************ CAUSE OF ERROR ************\n\n");
        errorReport.append(stackTrace.toString());

        errorReport.append("\n************ DEVICE INFORMATION ***********\n");
        errorReport.append("Brand: ");
        errorReport.append(Build.BRAND);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Device: ");
        errorReport.append(Build.DEVICE);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Model: ");
        errorReport.append(Build.MODEL);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Id: ");
        errorReport.append(Build.ID);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Product: ");
        errorReport.append(Build.PRODUCT);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("\n************ FIRMWARE ************\n");
        errorReport.append("SDK: ");
        errorReport.append(Build.VERSION.SDK_INT);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Release: ");
        errorReport.append(Build.VERSION.RELEASE);
        errorReport.append(LINE_SEPARATOR);
        errorReport.append("Incremental: ");
        errorReport.append(Build.VERSION.INCREMENTAL);
        errorReport.append(LINE_SEPARATOR);

        Log.e("SolverExceptionHandler", errorReport.toString());
        Intent intent = new Intent(myContext, EditorActivity.class);
        intent.putExtra("error", errorReport.toString());
        myContext.startActivity(intent);

        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(10);
    }

}