不';我甚至都不了解这个方法。“错误”;在空对象引用上调用虚拟方法java.lang.list;
我正在使用SQLite数据库创建一个时间表应用程序,它工作得很好,直到我读了一篇关于良好编码实践的文章。 我有一个DatabaseHelper文件,其中包含1000多行代码,因为其中包含了每个create、read、update和delete语句。我去编辑我的代码,这样每个表都有一个单独的类用于它的CRUD语句,但现在它不工作了。 每次我运行应用程序时,它都会崩溃,我会得到错误信息不';我甚至都不了解这个方法。“错误”;在空对象引用上调用虚拟方法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
在空对象引用上调用虚拟方法java.lang.list Database.SschoolDay\u CRUD
(90%是这样。我恐怕至少24小时内无法获取具体错误,但我要到明天下午才能访问具有运行该应用程序权限的电脑。)
我不想回到1000多行+类的地狱。
所以,在做了一些调查工作之后,我已经找出了具体的错误所在
MyDatabaseHelper
运行此方法
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 day调用getAllsChoolDays()之前的代码>代码>
您的初始化应该如下所示:
/*
* 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;
}