不';我甚至都不了解这个方法。“错误”;在空对象引用上调用虚拟方法java.lang.list;

不';我甚至都不了解这个方法。“错误”;在空对象引用上调用虚拟方法java.lang.list;,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在使用SQLite数据库创建一个时间表应用程序,它工作得很好,直到我读了一篇关于良好编码实践的文章。 我有一个DatabaseHelper文件,其中包含1000多行代码,因为其中包含了每个create、read、update和delete语句。我去编辑我的代码,这样每个表都有一个单独的类用于它的CRUD语句,但现在它不工作了。 每次我运行应用程序时,它都会崩溃,我会得到错误信息 在空对象引用上调用虚拟方法java.lang.list Database.SschoolDay\u CRUD (9

我正在使用SQLite数据库创建一个时间表应用程序,它工作得很好,直到我读了一篇关于良好编码实践的文章。 我有一个DatabaseHelper文件,其中包含1000多行代码,因为其中包含了每个create、read、update和delete语句。我去编辑我的代码,这样每个表都有一个单独的类用于它的CRUD语句,但现在它不工作了。 每次我运行应用程序时,它都会崩溃,我会得到错误信息

在空对象引用上调用虚拟方法java.lang.list Database.SschoolDay\u CRUD
(90%是这样。我恐怕至少24小时内无法获取具体错误,但我要到明天下午才能访问具有运行该应用程序权限的电脑。)

我不想回到1000多行+类的地狱。 所以,在做了一些调查工作之后,我已经找出了具体的错误所在

My
DatabaseHelper
运行此方法

 SschoolDay_CRUD sschool_day;
List<SschoolDay_model_class> s;
public List<SschoolDay_model_class> getAllSSchoolDays() {
            Log.v("Does it get here?", "YES");

            s = sschool_day.getAllSSchoolDays();
            Log.v("Does it get here?", "YES2");

            return s;
        }
日志甚至不显示“BEFORE”。因此,它似乎是

public List<SschoolDay_model_class> getAllSSchoolDays() {
}

编辑: SschoolDay_积垢等级如下:

       package Database;

   import java.util.ArrayList;
   import java.util.List;


   import android.content.ContentValues;
   import android.content.Context;
   import android.database.Cursor;
   import android.database.sqlite.SQLiteDatabase;
   import android.database.sqlite.SQLiteOpenHelper;
   import android.util.Log;

   public class SschoolDay_CRUD extends SQLiteOpenHelper {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
}
/*
 * School Days will never be deleted, only set to used or not, which will determine their use.
 * Therefore I have not written a delete statement for school day.
 */

/*
 * Creating a School Day
 */


public long createSSchoolDay(SschoolDay_model_class school_day) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY, school_day.getschool_day());
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY_USED, school_day.getUsed());
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY_NO_OF_LESSONS, school_day.getNo_of_lessons());

    // insert row
    long sschool_day_id = db.insert(DatabaseHelper.TABLE_SSCHOOL_DAY, null, values);

    return sschool_day_id;
    }

/*
 * getting all SchoolDays
 */
public List<SschoolDay_model_class> getAllSSchoolDays() {
    Log.v("Peep", "BEFORE");
    List<SschoolDay_model_class> school_day = new ArrayList<SschoolDay_model_class>();
    Log.v("Peep", "after");
    String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_SSCHOOL_DAY;

    Log.e(DatabaseHelper.LOG, selectQuery);

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            SschoolDay_model_class sdy = new SschoolDay_model_class();
            sdy.setSchool_day_id(c.getInt((c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_ID))));
            sdy.setSchool_day(c.getString(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY)));
            sdy.setUsed(c.getString(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_USED)));
            sdy.setNo_of_lessons(c.getInt(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_NO_OF_LESSONS)));

            // adding to SchoolDay list
            school_day.add(sdy);
        } while (c.moveToNext());

    }
    return school_day;
}

/*
 * Updating a SchoolDay
 */
public int updatesSchoolDay(SschoolDay_model_class school_day) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY, school_day.getschool_day());
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY_USED, school_day.getUsed());
    values.put(DatabaseHelper.KEY_SSCHOOL_DAY_NO_OF_LESSONS, school_day.getNo_of_lessons());
    // updating row
    return db.update(DatabaseHelper.TABLE_SSCHOOL_DAY, values, DatabaseHelper.KEY_SSCHOOL_DAY_ID + " = ?",
            new String[] { String.valueOf(school_day.getSchool_day_id()) });
}
@Override
public void onCreate(SQLiteDatabase db) {


    // creating required tables
    db.execSQL(DatabaseHelper.CREATE_TABLE_SSCHOOL_DAY);
    db.execSQL(DatabaseHelper.CREATE_TABLE_SPERIODS);
    db.execSQL(DatabaseHelper.CREATE_TABLE_SLESSON);
    db.execSQL(DatabaseHelper.CREATE_TABLE_SHOMEWORK);
    db.execSQL(DatabaseHelper.CREATE_TABLE_SEXAM);
    db.execSQL(DatabaseHelper.CREATE_TABLE_SLESSON_TIME);
    //creating revision tables
    db.execSQL(DatabaseHelper.CREATE_TABLE_RREVISION_DAY);
    db.execSQL(DatabaseHelper.CREATE_TABLE_RSESSION_PERIOD);
    db.execSQL(DatabaseHelper.CREATE_TABLE_RSESSION);
    db.execSQL(DatabaseHelper.CREATE_TABLE_RSESSION_TIME);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // on upgrade drop older tables
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SSCHOOL_DAY);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SPERIODS);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SLESSON);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SHOMEWORK);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SEXAM);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_SLESSON_TIME);

    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_RREVISION_DAY);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_RSESSION_PERIOD);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_RSESSION);
    db.execSQL("DROP TABLE IF EXISTS " +DatabaseHelper.TABLE_RSESSION_TIME);
    // create new tables
    onCreate(db);
        }
public  SschoolDay_CRUD(Context context) {
    super(context, DatabaseHelper.DATABASE_NAME, null, DatabaseHelper.DATABASE_VERSION);
    // TODO Auto-generated constructor stub
}
因为这一行:
SQLiteDatabase db=this.getReadableDatabase()

以下是DatabaseHelper的构造函数:

    public Context DBHContext;

 public DatabaseHelper(Context context) {


    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    DBHContext = context;
}
然后在SschoolDay_CRUD的初始化中使用DBHContext

SschoolDay_CRUD sschool_day = new SschoolDay_CRUD(DBHContext);

从您的代码来看,您的
sschool\u day
此时似乎未初始化:

     s = sschool_day.getAllSSchoolDays();
您必须初始化
SschoolDay\u CRUD sschool\u daygetAllsChoolDays()之前的代码>

您的初始化应该如下所示:

/*
 * getting all SchoolDays
 */
public List<SschoolDay_model_class> getAllSSchoolDays() {
    Log.v("Peep", "BEFORE");
    List<SschoolDay_model_class> school_day = new ArrayList<SschoolDay_model_class>();
    Log.v("Peep", "after");
    String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_SSCHOOL_DAY;

    Log.e(DatabaseHelper.LOG, selectQuery);

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            SschoolDay_model_class sdy = new SschoolDay_model_class();
            sdy.setSchool_day_id(c.getInt((c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_ID))));
            sdy.setSchool_day(c.getString(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY)));
            sdy.setUsed(c.getString(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_USED)));
            sdy.setNo_of_lessons(c.getInt(c.getColumnIndex(DatabaseHelper.KEY_SSCHOOL_DAY_NO_OF_LESSONS)));

            // adding to SchoolDay list
            school_day.add(sdy);
        } while (c.moveToNext());

    }
    return school_day;
}
package Database;

public class SschoolDay_model_class {

long school_day_id;
String school_day;
String used;
int no_of_lessons;

//constructors
public SschoolDay_model_class() {
}

public SschoolDay_model_class (long school_day_id, String school_day, String used, int no_of_lessons){
    this.school_day_id = school_day_id;
    this.school_day = school_day;
    this.used = used;
    this.no_of_lessons = no_of_lessons;

}


//setters
public void setSchool_day_id(long school_day_id){
    this.school_day_id = school_day_id;
}

public void setSchool_day(String school_day){
    this.school_day = school_day;
}

public void setUsed(String used) {
    this.used = used;
}

public void setNo_of_lessons(int no_of_lessons){
    this.no_of_lessons = no_of_lessons;
}

//getters
public long getSchool_day_id() {
    return this.school_day_id;
}

public String getschool_day() {
    return this.school_day;
}

public String getUsed() {
    return this.used;
}

public int getNo_of_lessons() {
    return this.no_of_lessons;
}
    SschoolDay_CRUD sschool_day = new SschoolDay_CRUD(yourContext);
   List<SschoolDay_model_class> s;
     public List<SschoolDay_model_class> getAllSSchoolDays() {
        Log.v("Does it get here?", "YES");

        s = sschool_day.getAllSSchoolDays();
        Log.v("Does it get here?", "YES2");

        return s;
    }
SschoolDay\u CRUD sschool\u day=新的SschoolDay\u CRUD(您的上下文);
名单;
公共列表GetAllsChoolDays(){
Log.v(“它到这里了吗?”,“是”);
s=sschool_day.getAllSSchoolDays();
Log.v(“它到这里了吗?”,“是的”);
返回s;
}

@Yazan,不,我的意思是,学校日没有初始化,这就是问题所在。因此,从未初始化的对象调用函数将引发此异常…您不能将其初始化为null。这也将引发此异常。它必须是一个有效的对象…什么是SschoolDay_CRUD?你能展示这门课吗?增加了Schoolday_CRUD类真棒,谢谢。嗯,我现在在使用getContext()或getApplicationContext()时遇到了一个问题,使用任何一个eclipse都会告诉我它们是未定义的
    SschoolDay_CRUD sschool_day = new SschoolDay_CRUD(yourContext);
   List<SschoolDay_model_class> s;
     public List<SschoolDay_model_class> getAllSSchoolDays() {
        Log.v("Does it get here?", "YES");

        s = sschool_day.getAllSSchoolDays();
        Log.v("Does it get here?", "YES2");

        return s;
    }