Quelle est la meilleure façon d'arrêter une activité et alerter l'utilisateur?
-
26-09-2019 - |
Question
J'ai une application qui doit créer une base de données et si cela échoue, alors aucun sens aller de l'avant. Je l'ai construit un AlertDialog et show()
, mais il affiche jamais. La logique passe à travers et vomit alors à cause de la base de données manquante.
Quelle est la bonne / meilleure façon de lancer un message et mettre fin à l'activité? Le code ci-dessous exécute bien (ce qui signifie le show()
se produit pendant le débogage et il tombe à la ligne suivante), mais l'interface utilisateur affiche jamais cette alerte. BTW -. Je réalise le jet peut-être pas le plus gracieux, mais je ne suis même pas obtenir loin si ... B ^)
try {
myDBHelp.createDataBase();
} catch (IOException ioe) {
new AlertDialog.Builder(this).setCancelable(false)
.setMessage(ioe.getMessage())
.setTitle("Database Create Failed")
.setPositiveButton("Quit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
throw new Error("Unable to create database - please try uninstall/reinstall");
}
})
.show();
La solution
Je fais quelque chose comme ceci:
void myFunction() {
try {
somecode..
} catch (IOException e){
e.printStackTrace();
doToast("Unknown Error"); //Display Toast to user
return; //Leave myFunction
}
somecode... //If no error continue here
return;
}
protected void doToast(final String str) {
this.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(myClass.this, str, Toast.LENGTH_SHORT).show();
}
});
}
Autres conseils
Je ne sais pas ce que l'écoulement u use.But ont une suggestion U peut le faire comme ça.
U peut commencer l'opération de base de données comme celui-ci ..
i = intention nouvelle intention (ce, Databaseoperation.class); startactivity (i); ............................... cela fera des contrôles pour passer à la classe databaseoperation il effectue diverses opérations comme open.close, insérer delete..etc.
U peut s'étendre dans la classe databasehelper construit
et maintenant quand un problème dans la base de données d'ouverture ou de toute substance, intention finish () et revenir à l'activité principale ...
U peut faire comme ça ..
Merci Rakesh
Est-ce que createDataBase()
l'erreur ou lancer le gérer lui-même? Si elle gère l'exception elle-même, il n'a jamais atteint votre bloc externe et donc vous ne passer par le bloc catch. Assurez-vous d'avoir throws IOException
ajouté à la fin de la signature de la méthode comme ceci:
public void createDataBase() throws IOException {[...]}
En outre, s'il vous plaît assurez-vous de ne pas avoir des blocs try / catch IOException attraper dans de createDataBase()
.
De cette façon, chaque fois qu'un IOException
se produit, il est délégué à votre bloc catch externe et votre boîte de dialogue apparaît.