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();
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top