Autore Topic: Domanda su try/catch  (Letto 280 volte)

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Domanda su try/catch
« il: 20 Giugno 2016, 12:01:47 CEST »
0
Salve a tutti

Stavo cercando di cambiare il codice(per scopi accademici) di una mia piccola app che stavo facendo
E mi ero imbattuto in questo pezzo di codice


Codice (Java): [Seleziona]
 public void layout_grafico(View view){
        DBHelper dbHelper=new DBHelper(this);

        if(dbHelper.query_casa()!=0){via();}
        else if(dbHelper.query_veicoli()!=0){via();}
        else if(dbHelper.query_alimenti()!=0){via();}
        else if(dbHelper.query_svago()!=0){via();}
        else if(dbHelper.query_altro()!=0){via();}
        else {
            Toast.makeText(getApplicationContext(),"Non esiste nessun pagamento effettuato",Toast.LENGTH_SHORT).show();
        }

    }
    public void via(){
        Intent i = new Intent(getBaseContext(),grafico_a_torta.class);
        startActivity(i);
    }

Semplicemente ho creato un oggetto di tipo DBHelper(una classe che gestisce i dati presenti nel database locale dell'app)
 
Subito dopo ho controllato tramite degli if se nel database ci fosse almeno un valore memorizzato. In caso il database fosse vuoto semplicemente facevo partire un toast dicendo appunto che non esisteva nessun pagamento effettuato.

Ora mi chiedevo se tutto questo si sarebbe potuto gestire con un try catch escludendo tutti i controlli if else oppure se si poteva inserire un try catch dove al suo interno ci fossero tutti gli if ed else è nel catch ovvero dove ci sarebbe l'eccezzione fare partire il Toast

Grazie in anticipo per le risposte  :-)

Online iClaude

  • Utente normale
  • ***
  • Post: 243
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Domanda su try/catch
« Risposta #1 il: 20 Giugno 2016, 14:48:08 CEST »
+1
Per usare un blocco try catch devi modificare i tuoi metodi query per fare in modo che lancino un'eccezione in caso di tabelle vuote. Onestamente non vedo un gran vantaggio nel fare ciò.
Molto più semplicemente puoi  risparmiarti tutti quegli if con via usando un unico if e l'operatore ||, e magari incapsulare il tutto nella tua classe DBHelper con un metodo del tipo isDatabaseEmpty
« Ultima modifica: 20 Giugno 2016, 14:53:13 CEST da iClaude »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 716
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Domanda su try/catch
« Risposta #2 il: 21 Giugno 2016, 10:05:57 CEST »
+1
Forse intendevi dire "blocco switch", ma no, anche in questo caso nessun guadagno perché il blocco switch confronta un singolo parametro con varie casistiche, mentre tu hai parametri differenti (query_casa, query_veicoli, ecc.)

Al più potresti semplificare leggermente così:

Codice (Java): [Seleziona]
  if (dbHelper.query_casa()!=0
      || dbHelper.query_veicoli()!=0
      || dbHelper.query_alimenti()!=0
      || dbHelper.query_svago()!=0
      || dbHelper.query_altro()!=0){
    via();
  } else {
    Toast.makeText(getApplicationContext(),"Non esiste nessun pagamento effettuato",Toast.LENGTH_SHORT).show();
  }
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:Domanda su try/catch
« Risposta #3 il: 22 Giugno 2016, 10:45:26 CEST »
0


Ciao grazie ai  vostri consigli ho risolto creando un'altro metodo che controllava se esistono valori memorizzati nel database,
se nel database c'è almeno un valore richiamera i metodi query mentre creerà un eccezione da gestire con throw in caso non ci fosse nulla

So bene che non è generalmente consigliabile ma lo volevo fare per scopo accademico e comprendere un pò meglio come gestire le eccezzioni

Alla fine ho pure tolto tutta la parte degli if lasciando solo questo

Codice (Java): [Seleziona]
  public void layout_grafico(View view){
       
        DBHelper dbHelper=new DBHelper(this);

    try {

        dbHelper.controllo_eccezzione();

        Intent i = new Intent(getBaseContext(),grafico_a_torta.class);
        startActivity(i);
        }
        catch (NullPointerException e){
            Toast.makeText(getApplicationContext(),"Non esiste nessun pagamento effettuato",Toast.LENGTH_SHORT).show();
        }
    }