应用程序崩溃'尝试调用虚方法'

时间:2015-04-12 01:33:35

标签: java android sqlite

当我尝试更新数据库时,我的应用程序崩溃了,它给了我以下问题

  

尝试调用虚方法' android.database.cursor com.leoni.bd.Gestion_db.FindDate(java.lang.String)'在空对象引用上

我无法找到空对象我尝试了很多东西,但它没有用!我需要帮助!

这是我的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});

    }

这是我的Controle.java活动中包含光标的方法

//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();
    }

}

这个ic Stat.java类包含一些字符串

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";

}

2 个答案:

答案 0 :(得分:0)

您的stacktrace为您提供所需的所有信息:

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

说的是Gestion_db类型的对象为空。因此,您可以在代码中查找此对象,并且只有一个_myGestionDB实例,如@ρяσѕρєя所述。

答案 1 :(得分:0)

错误消息将有问题的调用主题的方法标识为com.leoni.bd.Gestion_db.FindDate(java.lang.String)。因此,遵循执行调用的表达式的类型必须是com.leoni.bd.Gestion_db或其子类型之一。

您发布的代码中唯一的候选者是实例变量_myGestionDB。您发布的代码没有任何特别的理由认为该值是非null的。如果引用类型的实例变量没有初始化程序,则它们默认初始化为null。如果在调用显示的方法之前未能将其值设置为其他值,则在发生方法调用尝试时它仍将为null。

相关问题