2012-02-04 94 views
0

我正在使用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

回答

3

爲什麼從活動從打開的幫手內部訪問實例變量如果我正確理解你的代碼,你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