checkIfRowExists () в sqlite не работает - PullRequest
0 голосов
/ 12 октября 2018

Редактировать
Проблема решена.Метод checkIfRowExists() метод работает правильно.Проблема была в том, что Button Listener менял date на неправильный формат.DatePicker использовал 05 для дней, а Button 5 без 0.

Мое приложение
показывает ListView с CheckBoxes.Состояние CheckBoxes сохраняется для каждого row для определенного date.date можно выбрать с помощью DatePicker или нажатием правой или левой Button для перехода на следующий или предыдущий день.
Я использую SQLite для сохранения данных.Мой table имеет шесть columns:

ID (Primary Key)  Date  ItemName  StateCB1  StateCB2  StateCB3  

Если пользователь выбирает новый date, метод checkIfRowExists(String date, String itemName) проверяет, существует ли row для определенных ListItem и date.Если нет, создается новый row.

Моя проблема
Предположим, что в database данные еще не сохранены.
Пользователь выбирает date 01.Jan.2000 через DatePicker.Метод checkIfRowExists() вызывается для каждого row для заданного date.Метод возвращает false, потому что в database нет данных и создаются новые rows для каждого listItem для данного date.Пользователь проверяет все CheckBoxes.table обновляется.
Теперь пользователь выбирает тот же date, нажимая LeftButton.Поэтому он идет к date 02.Jan.2000, нажимает leftButton, и теперь выбирается date 01.Jan.2000.Снова методы checkIfRowExists() вызываются для каждого row для данного date.На этот раз он должен вернуть true, потому что для этого date существуют данные.

Проблема: метод checkIfRowExists() возвращает false вместо true и создаются новые rows.Теперь есть избыточные rows.

Если пользователь выбирает date 01.Jan.2000 во второй раз с помощью DatePicker или LeftButton, метод checkIfRowExists() возвращает true.Но поскольку теперь существует два rows для каждого date и item, изменения в CheckBox state теперь сохраняются отдельно.state из CheckBoxes сохраняется отдельно для date, выбранного DatePicker и date, выбранного LeftButton.

Я не могу найти свою ошибку.Я уже просмотрел stackoverflow, но не смог найти ответ.Я думаю, что проблема в методе checkIfRowExists ().

checkIfRowExists () вызывается здесь в классе адаптера:
date и itemTitle верны.Так что это не проблема.

//Check if row exists
            Boolean exists = mDB.checkIfRowExists(MainActivity.date, item.getTitle());
            System.out.println("Does row exist? " + exists );
            if(!exists){
                //create new row
                mDB.addRow(MainActivity.date, item.getTitle());
            }
            //load data
            boolean[] stateCheckBox = mDB.getCheckBoxState(MainActivity.date, item.getTitle());  

checkIfRowExists () в классе DBHelper

//Check if row already exists
public boolean checkIfRowExists(String date, String itemName){
    Cursor cursor = null;
    boolean exists = true;
    System.out.println("checkIfRowExists:" + date + " " + itemName);
    String checkQuery = "SELECT " + COLUMN_ID + " FROM " + DBTABLE_StateCB +
            " WHERE " + COLUMN_DATE + "= '" + date + "'" +
            " AND " + COLUMN_ITEM + " = '" + itemName + "'" ;
    cursor = mDB.rawQuery(checkQuery, null);
    exists = (cursor.getCount() > 0);
    cursor.close();
    return exists;
}  

DatePicker

   DatePickerDialog mDatePicker;
        mDatePicker = new DatePickerDialog(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                //Change date
                setDate(year, monthOfYear, dayOfMonth); 

                //Update ListView 
                adapter.notifyDataSetChanged();  

КнопкаСлушатель, который меняет дату

//Click on left Button
    leftBTN.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

            //Change Date to previous day
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            try{
                Date prevDate = format.parse(date);
                Calendar cal = Calendar.getInstance();
                cal.setTime(prevDate);
                cal.add(Calendar.DATE, -1);
                Date mydate = cal.getTime();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    date = sdf.format(mydate);
                } catch (Exception e){
                    e.printStackTrace();
                }
               /* mYear = cal.get(Calendar.YEAR);
                mMonth = cal.get(Calendar.MONTH);
                mDay = cal.get(Calendar.DAY_OF_MONTH);
                date = (mYear + "-" + mMonth + "-" + mDay); */
            }catch (ParseException e){
                e.printStackTrace();
            }

            //Set Left/Right Button
            setBTN();

            //Update ListView 
            adapter.notifyDataSetChanged();
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...