1 回答

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊
您的CREATE TABLE聲明不包括NOT NULL該列TaskName,盡管您說它被定義為NOT NULL.
所以這是第一個不一致。
您必須更改此行:
+ChallengesEntry.DB_COLUMN + " TEXT , "
到
+ChallengesEntry.DB_COLUMN + " TEXT NOT NULL, "
然后從模擬器/設(shè)備卸載應(yīng)用程序,以便刪除數(shù)據(jù)庫
,然后重新運行應(yīng)用程序,以便重新創(chuàng)建數(shù)據(jù)庫和表。
但是有一種情況是已經(jīng)NOT NULL為列創(chuàng)建了表,TaskName并且您可能對代碼進(jìn)行了不反映表的真實狀態(tài)的更改。
如果是這種情況,那么您得到的錯誤是有原因的:
您有 2 種不同的方法:
insertTask()并將insertDay()數(shù)據(jù)插入到您的表中!為什么?
這意味著表的每一行都有一個 ID,只有 1 列包含數(shù)據(jù),
另一列為空 ( null)。
這是你想要的嗎?我不這么認(rèn)為。
因此,如果列TaskName已定義NOT NULL并且您執(zhí)行insertDay(),
那么您會收到錯誤,因為TaskName在該行中沒有值(它為空)
并且這是不允許的。
因此,從EditText和 中獲取數(shù)據(jù)并AlertDialog
使用 1 個插入語句將其保存到表中,如下所示:
public boolean insertData(String taskName, String days){
DbHelper mDbHelper = new DbHelper(this);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ChallengesEntry.DB_COLUMN,taskName);
values.put(ChallengesEntry.DB_COLUMN_DAYS,days);
boolean result = db.insert(ChallengesEntry.DB_TABLE, null, values) >= 0;
db.close();
return result;
}
如果插入成功,此方法返回true或。false你可以這樣稱呼它:
boolean successful = insertData(taskName, days);
其中taskname和days是您從EditText和收集的值A(chǔ)lertDialog。
編輯
在您的活動類中聲明此變量:
long taskId = 0;
此方法將插入任務(wù)名稱:
private long insertTask(){
String name = editChallengeName.getText().toString().trim();
if (name.isEmpty())
return -1;
DbHelper mDbHelper = new DbHelper(this);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ChallengesEntry.DB_COLUMN, name);
long id = db.insert(ChallengesEntry.DB_TABLE, null, values);
db.close();
return id;
}
你把它叫做你有的地方insertTask();:
taskid = insertTask();
然后此方法將更新 id = taskid 的行:
private void insertDay(String task) {
DbHelper mDbHelper = new DbHelper(this);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ChallengesEntry.DB_COLUMN_DAYS, task );
db.update(ChallengesEntry.DB_TABLE, values, ChallengesEntry.DB_COLUMN + "=" + taskid, null);
db.close();
}
你調(diào)用它就像你調(diào)用前一個一樣insertDay()
添加回答
舉報