2011-02-06 3 views
0

J'ai ce morceau de code qui est vraiment sujette aux erreurs, donc je l'ai enveloppé avec try {} catch. Je ne veux pas revenir à l'activité précédente, je veux juste qu'elle reste sur l'activité en cours pour que l'utilisateur puisse éditer tout ce qui ne va pas.Comment conserver l'activité sur Force Close?

Comment l'implémenter?

try{ 
     orgi.insertOrThrow(tableName, null, values); 
     Toast.makeText(this, "You have successfully created a new profile!", 2).show(); 
     gotoProfileList(); 
     Log.e(getClass().getSimpleName(),"Successfully added to database"); 
    }catch(SQLiteException se){ 
     Log.e(getClass().getSimpleName(), "Database connection failed!" + se); 

     //Stay in this activity... 
    }finally{ 
     if (orgi != null){ 
      orgi.close(); 
     } 
    } 

Oubliez ça, j'ai pu résoudre mon propre problème en montrant un AlertDialog qui indique à l'utilisateur l'erreur. Merci quand même. :)

  try{ 
       orgi.insertOrThrow(tableName, null, values); 
       Toast.makeText(this, "You have successfully created a new profile!", 2).show(); 
       gotoProfileList(); 
       Log.e(getClass().getSimpleName(),"Successfully added to database"); 
      }catch(SQLiteException se){ 
       Log.e(getClass().getSimpleName(), "Database connection failed!" + se); 
       displayError(); 
       //stayInThisActivity(); 
      }finally{ 
       if (orgi != null){ 

       } 

public void displayError(){ 
      AlertDialog.Builder error = new AlertDialog.Builder(this); 
      error.setMessage("That profile name already exists, try another one.").setCancelable(false).setPositiveButton("Yes",new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 

       } 
      }); 

      AlertDialog alert = error.create(); 
      alert.setTitle("Error"); 
      alert.show(); 
     } 
+0

Le code me semble correct, quel comportement obtenez-vous avec ce code? Des exceptions? –

+1

Je ne comprends pas le problème, la force fermer la plupart du temps a une raison par exemple si vous accédez à des objets nuls. Donc, vous voulez garder l'activité même quand quelque chose comme ça arrive? Si c'est le cas, ça ne me semble pas la bonne façon :). – Tosa

+0

Désolé si ce n'était pas si clair. Il semble que l'application se ferme à cause de orgi.close(); Je n'étais pas au courant que finally() est appelée juste après avoir rattrapé l'erreur. J'ai dû le supprimer pour que l'application ne retourne pas à l'écran d'accueil. :) Merci quand même. – SushiRoll

Répondre

2

Les fermetures de force sont causées par des exceptions non interceptées. Vous ne récupérez que l'exception SQLiteException dans votre exemple. Vous devez attraper d'autres exceptions et les gérer avec élégance. Maintenant, une cause classique pour FC est l'utilisation d'objets NULL et NullPointerExceptions qui en résulte. Vous ne devriez pas les attraper. Votre application sera trop foiré pour continuer correctement dans de nombreux cas. Vous pouvez en savoir plus ici: Catch_NullPointerException

Dans tous les cas, vous devez exécuter l'application dans l'émulateur ou sur un téléphone connecté, provoquer le crash, puis vous connecter au journal de l'appareil avec DDMS ou "adb logcat". Voyez le backtrace, trouvez l'erreur, réparez-la. Si votre application est sur le marché, le marché listera les backtraces envoyés par les appareils de vos utilisateurs pour vous. Si vous n'utilisez pas (encore?) Android Market, vous pouvez faire en sorte que votre application enregistre les stacktraces à distance via un script PHP s'exécutant sur un serveur web avec android-remote-stacktrace

BTW il est préférable de passer l'Exception en tant que troisième paramètre aux méthodes Log au lieu de concaténer le second paramètre à l'exception (appelant ainsi implicitement toString()). Dans votre exemple ce serait:

Log.e(getClass().getSimpleName(), "Database connection failed!", se); 
+0

Merci d'avoir répondu! :) – SushiRoll

+0

De rien. Ne pas oublier d'accepter une réponse si elle résout le problème! –

Questions connexes