Я знаю, что этот вопрос задавался много раз, но, похоже, ни один из них не решил мою проблему. Вот так выглядит приложение.
Вот функция, которая выполняет команду update
.
void incrementAttendance(Subject subject) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_PRESENT, subject.getPresent());
db.update(TABLE_ATTENDANCE, values, KEY_ID + " = " + subject.getID(),null);
db.close();
}
Это класс, в котором определены атрибуты таблицы.
public class Subject {
int _id;
String _subjectName;
int _present;
int _absent;
public Subject() {};
public Subject(int id, String subjectName, int present, int absent) {
this._id = id;
this._present = present;
this._absent = absent;
this._subjectName = subjectName;
}
public Subject(String subjectName, int present, int absent) {
this._present = present;
this._absent = absent;
this._subjectName = subjectName;
}
public int getID() {
return this._id;
}
public void setID(int id) {
this._id = id;
}
public void setSubjectName(String subjectName) {
this._subjectName = subjectName;
}
public void setPresent(int present) {
this._present = present;
}
public void setAbsent(int absent) {
this._present = absent;
}
public void incrementPresent() {
this._present += 1;
}
public void incrementAbsent() {
this._absent += 1;
}
public void decrementAbsent() {
this._absent -= 1;
}
public String getSubjectName() {
return this._subjectName;
}
public int getPresent() {
return this._present;
}
public int getAbsent() {
return this._absent;
}
}
И так вызывается команда. Функция вызывается при нажатии кнопки «Присутствовать» в представлении списка.
public void myClickHandler(View v) {
LinearLayout viewParentRow = (LinearLayout) v.getParent();
TextView child = (TextView)viewParentRow.getChildAt(1);
child.setText("Present: " + 1);
int id = Integer.parseInt(child.getTag().toString());
subjects.get(id).incrementPresent();
db.incrementAttendance(subjects.get(id));
adapter.notifyDataSetChanged();
}
Я попытался изменить запрос на обновление для использования аргументов, но этот ответ предложил использовать целые числа в аргументах выиграно ' т работа. Я также пытался использовать execSQL
, но даже это не сработало. Я также удалял и переустанавливал приложение каждый раз, когда вносил изменения. В большинстве ответов на подобные вопросы предлагалось заменить db.update(TABLE_ATTENDANCE, values, KEY_ID + " = " + subject.getID(),null);
строковыми аргументами или использовать execSQL
, оба из которых не сработали. Здесь TABLE_ATTENDANCE
- название моей таблицы. В logcat также не генерируется ошибка.
Другие запросы работают нормально.