編集: 私は解決策を見つけました。どうやら、db.insertのnullColumnHackとして「_id」を入れた場合
dbSave.insert(db.getTable(), "_id", values);
その後、それは動作します。誰かが理由を説明できますか?
アプリケーションにDBがあります。テキストフィールドは問題なく機能し、問題なく書き込みと取得ができます。ただし、「整数主キー」であるID列がデータベースに追加されません。
これが私のDBHelperonCreateです
public void onCreate(SQLiteDatabase db) {
String CREATE_PASS_TABLE = "CREATE TABLE " + TABLE_PASS + "("
+ KEY_ID + " INTEGER PRIMARY KEY, " + KEY_USE + " TEXT,"
+ KEY_PASS + " TEXT" + ")";
db.execSQL(CREATE_PASS_TABLE);
}
DBに値を追加する個別のクラス:
private void saveToDB() {
SQLiteDatabase dbSave = db.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(db.getKeyUse(), edtUse.getText().toString());
values.put(db.getKeyPass(), edtPassToSave.getText().toString());
dbSave.insert(db.getTable(), null, values);
dbSave.close();
dialog.dismiss();
}
ここでレコードを取得します。
private List<Passwords> getPasswords() {
List<Passwords> passwordList = new ArrayList<Passwords>();
String selectQuery = "SELECT * FROM " + dbHelp.getTable();
SQLiteDatabase db = dbHelp.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Passwords password = new Passwords();
Toast.makeText(getApplicationContext(), cursor.getString(0), Toast.LENGTH_SHORT).show();
//password.setId(Integer.parseInt(cursor.getString(0)));
password.setUse(cursor.getString(1));
password.setPass(cursor.getString(2));
passwordList.add(password);
} while (cursor.moveToNext());
}
return passwordList;
}
ただし、IDを取得してintとして解析しようとすると、nullPointerExceptionが発生します。トーストでID値を確認すると、すべて空白になっています。何が起こっているのですか、どうすれば修正できますか?