2015-04-12 1 views
0

Mon application Craches lorsque je tente de mettre à jour ma base de données, il me donne le problème suivantApp tentative d'invoquer la méthode virtuelle 'Craches

tentative d'invoquer la méthode virtuelle « android.database.cursor com.leoni.bd .Gestion_db.FindDate (java.lang.String) » sur un objet null référence

je ne pouvais pas trouver l'objet null j'ai essayé beaucoup de choses, mais cela n'a pas fonctionné! j'ai besoin d'aide s'il vous plait !

ceci est ma classe Gestion_db.java

private SQLiteDatabase _myDbm; 

public Gestion_db(Context pContext) { 

    SqliteCreator s = new SqliteCreator(pContext, Stat.DB_NAME, null, 1); 

    _myDbm = s.getWritableDatabase(); 
} 

public void close() { 
    _myDbm.close(); 
} 

public Cursor FindDate(String Attribute) { 
     String query = "SELECT * FROM " +Stat.TABLE_NAME +" WHERE ? LIKE '%?%' "; 
     return _myDbm.rawQuery(query, new String[] {Stat.COL_DATE,Attribute}); 

    } 

c'est la méthode de mon activité Controle.java Wich contiennent le curseur

//header of the activity 
private Gestion_db _myGestionDB; 
private String _myRecognizedText = null; 

// Mise à jour de la base de données quelque soit l'action 
private void MiseAJour() { 

    String dateCourante = new SimpleDateFormat("yyyy:MM:dd",Locale.getDefault()).format(new Date()); 
    Boolean existe=false; 

    Cursor c = _myGestionDB.FindDate(dateCourante); 

    if (c.getCount() != 0) { 

     c.moveToFirst(); 

     while (!c.isAfterLast()) { 


      String ldate = c.getString(c.getColumnIndex(Stat.COL_DATE)); 
      String lMatricule = c.getString(c.getColumnIndex(Stat.COL_TEXTE_OCR)); 

      if (ldate.equals(dateCourante)&& lMatricule.equals(_myRecognizedText)) { 
       existe=true; 
       break; 

      } 
      c.moveToNext(); 

     } 



    } 

    if (existe){ 
     UpdateHeure(_myHeure); 

    }else{ 
     AddVoyage(); 
    } 

} 

cette classe ic Stat.java qui contient des cordes

public class Stat { 
public static final String DB_NAME = "leoni.db"; 
public static final String URL_CHECK = "http://192.168.1.6/check.php"; 
public static final String GET_URL = "http://192.168.1.6/getChauffeurs.php"; 
public static final String COL_ID = "_id"; 

// Gestion des déplacements 
public static final String TABLE_NAME = "gestion_des_deplacements"; 
public static final String COL_TEXTE_OCR = "texte_ocr"; 
public static final String COL_DATE = "date"; 
public static final String COL_HEURE_DEPART = "heure_depart"; 
public static final String COL_HEURE_ARRIVEE = "heure_arrive"; 
public static final String CREATE_TABLE_DEPLACEMENTS = "CREATE TABLE " 
     + Stat.TABLE_NAME + " (" + Stat.COL_ID 
     + " INTEGER PRIMARY KEY autoincrement," + Stat.COL_TEXTE_OCR 
     + " VARCHAR(40)" + "," + Stat.COL_CHAUFFEUR + " VARCHAR(50)" + "," 
     + Stat.COL_DATE + " VARCHAR(50)" + "," + Stat.COL_HEURE_DEPART 
     + " VARCHAR(30)" + "," + Stat.COL_HEURE_ARRIVEE + " VARCHAR(30));"; 

// Gestion des chauffeurs 
public static final String COL_MATRICULE = "matricule"; 
public static final String COL_CHAUFFEUR = "chauffeur"; 

} 
+1

'_myGestionDB' est' null' –

Répondre

0

Votre stacktrace vous donne toutes les informations nécessaires:

com.leoni.bd.Gestion_db.FindDate(java.lang.String)' on a null object reference

Ce qui est dit est que l'objet de type Gestion_db est nulle. Donc, vous regardez dans votre code pour cet objet, et vous avez une seule instance de _myGestionDB, comme indiqué par @ ρяσѕρєя.

0

Le message d'erreur identifie la méthode qui fait l'objet de l'appel problématique comme com.leoni.bd.Gestion_db.FindDate(java.lang.String). Il s'ensuit donc que le type de l'expression sur laquelle l'invocation est effectuée doit être com.leoni.bd.Gestion_db ou l'un de ses sous-types.

Le seul candidat dans le code que vous avez publié est la variable d'instance _myGestionDB. Le code que vous avez posté ne donne aucune raison particulière de penser que la valeur serait non nulle. Les variables d'instance de type référence sont initialisées à null par défaut si elles n'ont pas d'initialiseur. Si vous ne parvenez pas à définir sa valeur sur autre chose avant d'appeler la méthode que vous affichez, elle sera toujours NULL lorsque la tentative d'invocation de méthode se produira.