Как обновить одну строку в SQLite?

148
28 декабря 2019, 05:30

Всем привет. Столкнулся с новой проблемой, которую не могу решить. Мне нужно обновить строку в БД, которая соответсвует данным, пришедшим с сервера. Я получаю массив из N. Каждая единица из этого N имеет тоже свой массив из 8 параметров. Мне нужно обновить значение всего лишь одного параметра, но он должен соответствовать тому item, который я выбрал в ListView (из 8 параметров есть id и есть time; мне по id нужно обновить соответствующее ему time).

Здесь я выбираю нужный мне item

public class ScheduleActivity extends Activity implements AdapterView.OnItemClickListener,
        View.OnClickListener {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_schedule_list);
        mListBodyAlarmSettings = mDataBase.loadAlarmSettings();
        mAdapter = new ScheduleAdapter(this, mListBodyAlarmSettings);
        mLvForSchedules.setAdapter(mAdapter);
    }
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(this, SettingsListScheduleActivity.class);
            intent.putExtra(ALARM_SETTINGS_KEY, mListBodyAlarmSettings.get(position));
            intent.putExtra("position", id);
            startActivity(intent);
    }

После нажатия на item перехожу в окно, где выбираю время

public class SettingsListScheduleActivity extends BaseActivity implements View.OnClickListener {
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings_list_schedule);
        Intent intent = getIntent();
        mBodyAlarmSettings = (BodyAlarmSettings) intent.getSerializableExtra(ScheduleActivity.ALARM_SETTINGS_KEY);
        mId = mBodyAlarmSettings.getId();
 public void showTimePicker() {
        final Calendar calendar = Calendar.getInstance();
        final int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        TimePickerDialog.OnTimeSetListener onTimeSetListener =
                new TimePickerDialog.OnTimeSetListener() {
                    @SuppressLint({"SetTextI18n", "NewApi"})
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        if (view.isShown()) {
                            calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                            calendar.set(Calendar.MINUTE, minute);
                            mGetHour = hourOfDay;
                            mGetMinute = minute;
                            mAlarmTimeInMinutes = mGetHour * 60 + mGetMinute;
                            time = mAlarmTimeInMinutes;
                            action = "update";
                         //   id = mDataBase.loadAlarmId();
                            postAlarmSettings();
                        /*    BodyAlarmSettings body = new BodyAlarmSettings();
                            body.setId(mId);
                            body.setTime(mAlarmTimeInMinutes);
                            mDataBase.saveTimeForListSchedule(body);
                            Log.d("Id", "" + mId); */
                            mBodyAlarmSettings.setTime(mAlarmTimeInMinutes);
                            mDataBase.updateTimeAlarm(mBodyAlarmSettings);
                            if (mGetMinute < 10) {
                                mSelectedTime.setText(String.valueOf(mGetHour) + ":0" + String.valueOf(mGetMinute));
                            } else {
                                mSelectedTime.setText(String.valueOf(mGetHour) + ":" + String.valueOf(mGetMinute));
                            }
                            mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                            mIntent = new Intent(getApplicationContext(), AlarmReceiver.class);
                            myThread.start();
                        }
                    }
                };
        TimePickerDialog timePickerDialog =
                new TimePickerDialog(SettingsListScheduleActivity.this,
                        android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
                        onTimeSetListener,
                        hour,
                        minute,
                        true);
        timePickerDialog.setTitle("Choice your time: ");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Objects.requireNonNull(timePickerDialog
                    .getWindow())
                    .setBackgroundDrawableResource(android.R.color.transparent);
        }
        timePickerDialog.show();
    }

А это БД, где я должен изменить данные

public class MainDB extends SQLiteOpenHelper {
    private static final String DB_NAME = "BabyGymDB";
    private static final int DB_VERSION = 2;
    private static final String _id = "_id";
private static final String ID_ALARM = "Id";
    private static final String TIME_ALARM = "Time";
    private static final String ID_BLOCK_ALARM = "Id_Block";
    private static final String TITLE_BLOCK_ALARM = "Block_Title";
    private static final String WORKWEEK = "Workweek";
    private static final String ACTIVE_CHECKBOX = "Active";
    private static final String ID_SOUND = "Id_Sound";
    private static final String DURATION_BLOCK = "Duration_Block";
private final String CREATE_ALARM_TABLE = "CREATE TABLE IF NOT EXISTS " +
            ALARM_TABLE + "(" +
            _id + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            ID_ALARM + " TEXT, " +
            TIME_ALARM + " INTEGER, " +
            ID_BLOCK_ALARM + " INTEGER, " +
            TITLE_BLOCK_ALARM + " TEXT, " +
            WORKWEEK + " TEXT, " +
            ACTIVE_CHECKBOX + " INTEGER, " +
            ID_SOUND + " INTEGER, " +
            DURATION_BLOCK + " INTEGER" + ");";
public void updateTimeAlarm(BodyAlarmSettings model) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        db.delete(ALARM_TABLE, null, null);
        cv.put(ID_ALARM, model.getId());
        cv.put(TIME_ALARM, model.getTime());
        cv.put(ID_BLOCK_ALARM, model.getIdBlock());
        cv.put(TITLE_BLOCK_ALARM, model.getBlockTitle());
        cv.put(WORKWEEK, model.getWorkweek());
        cv.put(ACTIVE_CHECKBOX, model.getActive());
        cv.put(ID_SOUND, model.getIdSound());
        cv.put(DURATION_BLOCK, model.getDurationBlock());
        db.update(ALARM_TABLE, cv, "Id = ?", new String[]{String.valueOf(ID_ALARM)});
        db.close();
    }

Код подрезал для краткости - не работает только метод update в БД.

READ ALSO
Как получить доступ к приватным полям

Как получить доступ к приватным полям

Не получается получить доступ к приватны полям

129
Параметр keyboard в vk api java

Параметр keyboard в vk api java

В процессе изучения vk api столкнулся с проблемой, что не могу найти в библиотеке vk-api параметра keyboard в методе messangesend Решил реализовать кнопки...

147
Как физически в бд происходит связь между таблицами?

Как физически в бд происходит связь между таблицами?

Я понимаю, что я уже достал вас своими вопросамиЯ начал читать книгу, но 1 момент все равно непонятен

134
Android что лучше использовать для 2d графики?

Android что лучше использовать для 2d графики?

Мне нужно сделать маленький конструкторЧто бы была картинка и на ней ещё несколько маленьких

122