我正在使用Android的SQLite来创建基于某些文件的关卡数据库。我首先创建一个SQLiteOpenHelper,然后在其上调用getReadableDatabase()或getWritableDatabase(),以便调用onCreate()方法并创建我的数据库:
@Override //Main Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new DbOpenHelper(this);
database = dbHelper.getWritableDatabase(); //is a field
-
public DbOpenHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
Log.d("CREATING CLASSS", "OSDIFJE*(#");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_TABLE_CREATE);
loadLevelData();
}
// Load data into the database on creation
private void loadLevelData() {
Log.d("DbOpenHelper", "Loading Level Data");
AssetManager mgr = MenuActi ~~snip~~
Log.d("dataaosdifj",MenuActivity.database.toString()); //NullPointerException!
MenuActivity.database.insert(DB_TABLE_NAME, null, info);
}
我还尝试在loadLevelData()方法中调用getWritableDatabase(),结果相同 我看到这是一个非常普遍的问题,但是大多数关于它的线程都没有任何解决方案!
请:'(
答案 0 :(得分:3)
为什么要从open helper中的活动访问实例变量?如果我正确理解您的代码,那么您的loadLevelData()
方法就是您的开放帮助方法。而不是你有什么,为什么不这样做:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_TABLE_CREATE);
loadLevelData(db);
}
// Load data into the database on creation
private void loadLevelData(SQLiteDatabase db) {
...
db.insert(DB_TABLE_NAME, null, info);
}
问题的根源在于,当您在DbOpenHelper中访问活动时,您的活动中的database
实例变量尚未分配...您仍然在通话中的&{ #39;创建数据库 - 恰好是dbHelper.getWritableDatabase()
- 并且结果没有返回给作业。