1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    juin 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : juin 2002
    Messages : 161
    Points : 76
    Points
    76

    Par défaut Connaitre la raison d'une erreur dans la console de plantage Google

    Bonjour,

    J'ai des remonté d'erreur concernant mon application dans la console de dev Google, mais ce dernier me donne que le message d'erreur Java, et ne rajoute pas la raison :

    Exemple:

    En ce moment, j'ai une:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    java.lang.IllegalStateException: 
      at android.database.sqlite.SQLiteClosable.acquireReference (SQLiteClosable.java:55)
      at android.database.sqlite.SQLiteDatabase.executeSql (SQLiteDatabase.java:1689)
      at android.database.sqlite.SQLiteDatabase.execSQL (SQLiteDatabase.java:1685)
      at com.ledoc.scoreassistant.GenericBDD.updateCommentParty (GenericBDD.java:595)
      at com.ledoc.scoreassistant.Joueur$5.onClick (Joueur.java:237)
      at com.android.internal.app.AlertController$ButtonHandler.handleMessage (AlertController.java:166)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6290)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
    Mais je ne sais pas quel requête est exécutée, pour mieux identifier le problème, ou quel est le message d'erreur précis (comme dans la console développeur d'Android Studio).

    Mon code est très simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public boolean updateCommentParty(int idparty, String comment) {
            boolean result = true;
            bdd.execSQL("UPDATE " + MaDatabase.TABLE_PARTY
                    + " SET " + MaDatabase.COLUMN_PARTY_COMMENT + " = ? WHERE "
                    + MaDatabase.COLUMN_PARTY_ID + " = ? ", new String[]{comment,String.valueOf(idparty)});
            return result;
        }
    et les variables comment et idparty sont normalement bien identifiées.

    Comment pourrais je avoir le détail de l'erreur ?
    Je précise que j'arrive a cette erreur sur mon téléphone (en version release), mais pas sur le debugger.
    dbsanté: Ma première application Android consacré au suivi médical totalement déconnecté.
    N'hésitez pas a la télécharger !!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    juillet 2012
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 349
    Points : 374
    Points
    374

    Par défaut

    Tu as mis le code de updateCommentParty mais le problème vient surement d'ailleurs.
    Ta "bdd" est bien créée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLiteDatabase bdd= this.getReadableDatabase();
    Supprime tous les si tu en as

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    juin 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : juin 2002
    Messages : 161
    Points : 76
    Points
    76

    Par défaut

    Hello,

    Merci pour ta réponse.

    Ma db est ouverte via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public void open(){
            //On ouvre la base en écriture
            bdd = MaBaseSQLite.getWritableDatabase();
        }
    L'appel de cette fonction se fait par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        private boolean AfficheModifCom(final int idparty) {
            boolean result = true;
    
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(getString(R.string.modifcomment));
    
            datasource.open();
    
            final EditText input = new EditText(this);
            input.setInputType(InputType.TYPE_CLASS_TEXT);
            builder.setView(input);
    
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String newnom = input.getText().toString();
                    datasource.updateCommentParty(idparty,newnom);
                    datasource.close();
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    datasource.close();
                }
            });
    
            builder.show();
    
            return result;
        }
    Tu pense que ce sont les datasource.close(); qu'il faudrait sortir pour les mettre apres le builder.show ?

    Le hic aussi est que je n'arrive pas a reproduire le bug sur le debugger ( Il marche niquel sur mon AVD
    dbsanté: Ma première application Android consacré au suivi médical totalement déconnecté.
    N'hésitez pas a la télécharger !!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    juillet 2012
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2012
    Messages : 349
    Points : 374
    Points
    374

    Par défaut

    Je ne vois pas trop à quoi correspond exactement le datasource, mais pour ma part, j'aurais mis datasource.open(); dans la méthode datasource.updateCommentParty(idparty,newnom);

    Je n'ai pas l'explication technique, mais à mon avis, le problème vient du fait que tu ouvre la bdd puis l'utilises dans un listener (le onclick). A ce moment, la bdd est probablement refermée. Donc ouvre ta bdd directement dans le onClick, et même directement dans updateCommentParty

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public boolean updateCommentParty(int idparty, String comment) {
            boolean result = true;
            bdd = MaBaseSQLite.getWritableDatabase()
            bdd.execSQL("UPDATE " + MaDatabase.TABLE_PARTY
                    + " SET " + MaDatabase.COLUMN_PARTY_COMMENT + " = ? WHERE "
                    + MaDatabase.COLUMN_PARTY_ID + " = ? ", new String[]{comment,String.valueOf(idparty)});
            return result;
        }
    Et supprime les datasource.close(), c'est souvent source de bugs, et ca ne sert à rien, car la base se ferme toute seule quand elle n'est pas utilisée.

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    juin 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : juin 2002
    Messages : 161
    Points : 76
    Points
    76

    Par défaut

    en fait j'ai une classe principale ou est déclaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private GenericBDD datasource;
    et une classe GenericBDD ou sont déclarés toutes mes fonctions SQL

    Je vais tester ta méthode demain. Merci
    dbsanté: Ma première application Android consacré au suivi médical totalement déconnecté.
    N'hésitez pas a la télécharger !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PYTHON 2.X comment gerer une erreur dans la console
    Par leptitom dans le forum Général Python
    Réponses: 2
    Dernier message: 28/04/2015, 23h04
  2. Réponses: 6
    Dernier message: 30/07/2010, 11h25
  3. Une erreur dans un script
    Par tsing dans le forum Linux
    Réponses: 9
    Dernier message: 16/03/2006, 15h50
  4. Comment détecter une erreur dans un process
    Par chuckboy dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2005, 10h40
  5. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 17/05/2005, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo