2016-05-30 17 views
1

私はアンドロイドの開発には新しく、sqliteを使用していくつかのデータを保持する簡単なアンドロイドアプリケーションを作っています。SqliteOpenHelper onCreate()メソッドの変更が無視されています

私は物事のデータベース側を処理するSqliteOpenHelperを持っています。私は、データベース私は別のクラス

cardDBHandler = new CardDBHandler(this, null, null, 1); 

私が変更したので

@Override 
    public void onCreate(SQLiteDatabase db) { 
     String query = "CREATE TABLE " + TABLE_CARDS + "(" + 
      CARD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      DECK_ID + " INTEGER, FOREIGN KEY (" + DECK_ID +") 
      REFERENCES DATABASE_NAME(COLUMN_ID), " + 
      CARD_FRONT + " TEXT, " + 
      CARD_BACK + " TEXT " + 
      ");"; 
     db.execSQL(query); 
     Log.d(TAG, "Created card database"); 
    } 

のonCreate方法でそれをインスタンス

クラスコンストラクタ

public CardDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, CARD_DATABASE_NAME, factory, CARD_DATABASE_VERSION); 
    } 

を開始するのonCreateメソッドを持っていますこのメソッドは、私のアプリはいくつかの例外につながる変更を登録していません。

私はアクティビティを追加するのと同じ方法でこのクラスをマニフェストに追加する予定ですか? ありがとうございます。

+1

は、あなたのSQLiteOpenHelper実装から、このコードですか?インスタンス化するところはどこですか? – Egor

+1

あなたは 'SQLiteOpenHelper'を使用していますか?そうでない場合は、このメソッドを自分で呼び出す必要があります(例えば、あなたのアクティビティ 'onCreate'から)、Androidはあなたのためにそれをしません。 – JonasCz

+0

@JonasCzはい私はSQLiteOpenHelperを使用しています。私は、アクティビティの仕組みと同じようにクラスをインスタンス化するたびにメソッドが自動的に呼び出されると想定しました。 – tinOfBeans

答えて

1

を形成呼ぶに分離する方法でそれを行いますテーブルを削除して再作成するonUpgradeメソッドを設定します。

コンストラクタが使用されていないため、コンストラクタからいくつかのパラメータを削除することもできます。

public CardDBHandler(Context context, SQLiteDatabase.CursorFactory factory) { 
    super(context, CARD_DATABASE_NAME, factory, CARD_DATABASE_VERSION); 
} 

その後

cardDBHandler = new CardDBHandler(this, null); 
+0

データベースを更新する場合、コンストラクタでバージョン番号は必要ありませんか?私は、現在のバージョン番号より大きいバージョン番号でDBをインスタンス化するたびに、onUpgradeメソッドが呼び出されることを読んでいます。 – tinOfBeans

+0

SqliteOpenHelperクラスで定数を定義したようですので、クラスを誤ってデータベースを再作成させてはいけません; –

+0

はい、それはもっと大きくなければならないので、1で開始しました。それを使用するコンストラクタはスーパーコンストラクタであり、自分自身ではありません –

-3

あなたはこれらの行を削除:あなたがそれを必要と

super.onCreate(stuff); 
setContentView(R.layout.stuff); 

を、最初の行はのonCreate父親を呼び出して、2つ目は、ビューを設定します。

あなたはこれらのスクリプトを実行したい場合は、データベースがすでに行われた後に変更を行った場合、あなたは、データベースのバージョンを更新する必要があり、あなたのonCreate

super.onCreate(stuff); 
setContentView(R.layout.stuff); 
doScript(); 




private void doScript(){ 
} 
+1

これは明らかにActivityのonCreate()メソッドではないので、あなたの答えは間違っています。 – Egor

関連する問題