0

Androidのデータベースでデータを保存しようとしています。

いくつかの例で見たように、データベースを処理するクラスを作成しました。

public class MyDatabase extends SQLiteOpenHelper
{
    private Table users;

    public MyDatabase(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public void onCreate(SQLiteDatabase db)
    {
        users.CreateTable();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {

    }
}

しかし、変数を初期化しようとするとusers、次のようになります。

users = new Table(getWritableDatabase());

私は取得NullPointerExceptionし、それはメートルではありません...私は試しました:

    public MyDatabase(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        users = new Table(getWritableDatabase());
    }

    public void onCreate(SQLiteDatabase db)
    {
        users = new Table(getWritableDatabase());
        users.CreateTable();
    }

しかしNullPointerException、関数を呼び出すと、まだ取得されますgetWritableDatabase()
初期値を設定するため、関数CreateTableは静的ではない必要があります。

どこが間違っていたのですか?

4

1 に答える 1

0

交換

public void onCreate(SQLiteDatabase db)
{
    users = new Table(getWritableDatabase());
    users.CreateTable();
}

public void onCreate(SQLiteDatabase db)
{
    users = new Table(db);
    users.CreateTable();
}

onCreate にいるとき、書き込み可能なデータベースは作成中です。ここでの onCreate メソッドは、アクティビティのメソッドと同じではありません。SQLiteOpenHelper の onCreate は、DB が最初に作成されたときにのみ呼び出されます。

于 2012-10-08T17:32:00.253 に答える