アプリケーション用のデータベースが必要ですが、以下のエラーが原因で強制的に閉じられます。私のアクティビティの1つで機能しますが、他のアクティビティでは機能しません
データベース ハンドラ:
public class DBGestion {
private static final int VERSION_BDD = 1;
private static final String NOM_BDD = "cityquest.db";
private static final String TABLE_QUEST = "table_quest";
private static final String COL_ID = "ID";
private static final int NUM_COL_ID = 0;
private static final String COL_USERNAME = "UserName";
private static final int NUM_COL_USERNAME = 1;
private static final String COL_NIVEAU ="Niveau";
private static final int NUM_COL_NIVEAU = 2;
private static final String COL_NBRIGOLETTES ="NbRigolettes";
private static final int NUM_COL_NBRIGOLETTES = 3;
private SQLiteDatabase bdd;
private MaBaseSQLite maBaseSQLite; // MaBaseSQLite extends SQLiteOpenHelper
public DBGestion(Context context) {
maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
}
public void open() {
bdd = maBaseSQLite.getWritableDatabase();
}
public void close() {
bdd.close();
}
public SQLiteDatabase getBDD() {
return bdd;
}
public long initDB(String userName){
ContentValues values = new ContentValues();
values.put(COL_USERNAME, userName);
values.put(COL_NIVEAU, 0);
values.put(COL_NBRIGOLETTES, 0);
return bdd.insert(TABLE_QUEST,null, values);
}
public int getNiveau() {
Cursor c = bdd.query(TABLE_QUEST, new String[] {COL_NIVEAU}, null, null, null, null, null);
int niveau = c.getInt(NUM_COL_NIVEAU);
return niveau;
}
public long setNiveau(int niveau) {
ContentValues values = new ContentValues();
values.put(COL_NIVEAU, niveau);
return bdd.update(TABLE_QUEST,values, COL_ID + " = 0", null);
}
}
get メソッドと set メソッドを使用するコードは次のとおりです (フランス語の変数名で申し訳ありません!)。基本的に、最初に質問が既に回答されているかどうかを確認し (getNiveau() == 1)、そうでない場合は、回答を確認してからウィジェットを非表示にし、setNiveau(1) (dbGestion を 2 回閉じることはできません。ボタンは非表示です)
データベースを使用する前は、何の問題もありませんでした..
public class Question extends Activity {
[variable declaration]
DBGestion dbGestion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.question_elisa);
Intent i = getIntent();
int format = i.getIntExtra(MainActivity.FORMAT,0);
dbGestion = new DBGestion(this);
[findViewById for all my variables]
if (format == 1){
dbGestion.open();
if (dbGestion.getNiveau() == 1) {
bonneReponse.setVisibility(View.VISIBLE);
[......]
dbGestion.close();
}
bouton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String reponse = new String("");
reponse = editText.getText().toString();
if(reponse.equalsIgnoreCase("poete") ||..){
bonneReponse.setVisibility(View.VISIBLE);
[...]
}
else {...}
dbGestion.setNiveau(1);
dbGestion.close();
}});
問題がどこから来るか知っていますか?
データベースを開始する方法は次のとおりです( MainActivity onCreate メソッドで):
final DBGestion dbGestion = new DBGestion(this);
dbGestion.open();
dbGestion.initDB("Alex");
dbGestion.close();
そして、ここに私の SQLiteOpenHelper クラスがあります:
public class MaBaseSQLite extends SQLiteOpenHelper {
private static final String TABLE_QUEST ="table_quest";
private static final String COL_ID ="ID";
private static final String COL_NIVEAU ="Niveau";
private static final String COL_USERNAME ="UserName";
private static final String COL_NBRIGOLETTES ="NbRigolettes";
private static final String CREATE_DB = "CREATE TABLE " + TABLE_QUEST + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_USERNAME + " TEXT NOT NULL, " + COL_NIVEAU + " TEXT NOT NULL, " + COL_NBRIGOLETTES + " TEXT NOT NULL); ";
public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_DB);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE" + TABLE_QUEST + ";");
onCreate(db);
}
}
Logcat へのリンク: http://pastebin.com/ds9bKFcS
再度、感謝します..