编辑: 我找到了解决方案。显然,如果我将“_id”作为 db.insert 中的 nullColumnHack
dbSave.insert(db.getTable(), "_id", values);
然后它工作。谁能解释为什么?
我的应用程序中有一个数据库。文本字段工作得很好,我可以毫无问题地编写和检索它们。但是,我的 ID 列是“整数主键”并没有添加到数据库中。
这是我的 DBHelper onCreate
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);
}
我将值添加到数据库的单独类:
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。当我用 Toast 检查 ID 值时,每个都是空白的。发生了什么事,我该如何解决?