SQLite getReadableDatabase()返回NULL

问题描述:

我正在使用Android的SQLite基于某些文件创建级别的数据库。我首先创建一个SQLiteOpenHelper,并在其上我打电话getReadableDatabase()或getWritableDatabase()这样的onCreate()方法被调用,我的数据库将被创建:SQLite getReadableDatabase()返回NULL

@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

您的DbOpenHelper是否扩展了SQLiteOpenHelper?数据库的类型是什么? – kosa 2012-02-04 15:06:34

+0

是的,数据库是一个SQLiteDatabase。 – user717572 2012-02-04 15:12:25

为什么从活动从打开的帮手内部访问实例变量如果我正确理解你的代码,你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); 
} 

你的问题的根源是,在你的活动database实例变量不是由你访问它记在你的DbOpenHelper时分配......你还在通话那就是创建数据库 - 恰好是dbHelper.getWritableDatabase() - 结果h没有返回任务。

+0

OFCOURSE!它基本上是指它自己,在它的创造中。我首先必须修复其他一些事情,但这真的有所帮助。 – user717572 2012-02-04 15:15:21

+0

别担心,我会做:) – user717572 2012-02-04 16:26:14