当我尝试更新数据库时,我的应用程序崩溃了,它给了我以下问题
尝试调用虚方法' 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";
}
答案 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。