2012-02-04 16 views
0

私はいくつかのファイルに基づいて、レベルのデータベースを作成するためにAndroidのSQLiteを使用しています。私が最初にSQLiteOpenHelperを作成し、その上に私はgetReadableDatabase()またはgetWritableDatabaseを(呼び出し)そうのonCreate()メソッドが呼び出されると、私のDBが作成されます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

+0

はい、データベースはSQLiteDatabaseです。 – user717572

答えて

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

+0

心配しないで、私はやります:) – user717572

関連する問題