Команда ОБНОВЛЕНИЕ не отражена - PullRequest
0 голосов
/ 09 марта 2020

Я знаю, что этот вопрос задавался много раз, но, похоже, ни один из них не решил мою проблему. Вот так выглядит приложение. enter image description here

Вот функция, которая выполняет команду 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 также не генерируется ошибка.

Другие запросы работают нормально.

1 Ответ

0 голосов
/ 09 марта 2020

Надеюсь, что приведенный ниже код решит вашу проблему,

 public boolean incrementAttendance(Subject subject) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_PRESENT, subject.getPresent());
    return db.update(TABLE_ATTENDANCE, values, KEY_ID + "=?", new String[]{String.valueOf(subject.getID())}) > 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...