Il mio “MyException”, che mostra Toast causa problemi mentre gettato in discussioni. Come devo riorganizzare gestione delle eccezioni?

StackOverflow https://stackoverflow.com/questions/3857676

Domanda

Ho scritto la mia eccezione (MyException) e registrazione e mostrando messaggi di errore nel modulo di Brindisi implementato. Ecco l'Shortform di esso ...

public class MyException extends Exception {

   public MyException(String msg) {
      Looper.prepare();
       Toast.makeText(Controller.getInstance().getApplicationContext(), msg , Toast.LENGTH_LONG).show();
       //Looper.loop();
       Looper.myLooper().quit();
   }
}

Tutto andava bene fino a che non le discussioni ora implementate in cui le eccezioni vengono gettati e catturati.

Probabilmente già visto, che ho giocato con la classe Looper, ma onestamente non so come farlo funzionare. E 'questo l'approccio giusto? Si può anche vedere che ho già memorizzare un riferimento della ApplicationContext nel mio Controller. Devo farlo con l'ActivityContext come bene e che fanno il Toast da questo ActivityContext? (Ma ho sentito che questa non è una buona pratica in termini di prestazioni)

Aggiorna

E 'questo il modo in cui dovrei andare, quando un'eccezione viene catturato in un thread in un ità Activ?

private Runnable exceptionCatchingThread   = new Runnable() {
          @Override
          public void run() {
           try { 
                throw new Exception();
           } catch (Exception e) {
              this.e = e;
              runOnUiThread(handleThreadExceptions); }
           }
    }

private Runnable  handleThreadExceptions  = new Runnable() {
             @Override
              public void run() {
               //Show toast or call the general ExceptionHandler, 
               //which is doing logging and stuff
                Helper.handleException(e);
               }
}
È stato utile?

Soluzione

Un Exception dovrebbe essere utilizzato per avvisare il chiamante che un problema si è verificato. E 'responsabilità del chiamante di fare qualcosa con la suddetta notifica, log, toast, ecc Si consiglia di non fare nulla di tutto ciò nella classe Exception stesso.

Si potrebbe creare un metodo di supporto per essere chiamato quando si cattura un'eccezione che fa la tostatura, ecc Se si vuole fare questo da molteplici attività, si potrebbe creare una util funzione in cui si passa nel contesto.

public static void displayExceptionMessage(Context context, String msg) {
 Toast.makeText(context, msg , Toast.LENGTH_LONG).show();
}

e nella vostra attività:

try {
  // something that causes Exception
} catch (MyException e) {
  Helper.displayExceptionMessage(this, e.getMessage());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top