Как сохранить несколько значений времени для таймера в настройках в kotlin? - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над приложением таймера, используя kotlin. Мое требование - сохранить несколько значений времени в настройках. Для этого я сделал отдельный класс для предпочтений. Это работа, проделанная мной.

В классе PrefUtil

private const val ElAPSED_TIME_VALUE_ID = "com.code.kotlin.elapsed_time"
        private var incrementedValue = 0

        fun getElapsedTime(context: Context) : Long {
            val preferences = PreferenceManager.getDefaultSharedPreferences(context)
            return preferences.getLong(ElAPSED_TIME_VALUE_ID , 0)
        }

        fun setElapsedTime(elapsedTime: Long, context: Context) {
            val editor = PreferenceManager.getDefaultSharedPreferences(context).edit()
            editor.putLong(ElAPSED_TIME_VALUE_ID, elapsedTime)
            editor.apply()
        }

Кнопка включения

btnToggle.setOnCheckedChangeListener { buttonView, isChecked ->
            if (isChecked) {
                startTimer()
                timerState = TimerState.Running
                showStartTime()
                startingTime = System.currentTimeMillis()
                PrefUtils.setStartTimeValue(startingTime, this)
                Toast.makeText(applicationContext, "Timer is Running", Toast.LENGTH_SHORT).show()
            } else {
                timer.cancel()
                onTimerFinished()
                elapsedTime()
                PrefUtils.getElapsedTime(this)
                Toast.makeText(applicationContext, "Timer is Stopped", Toast.LENGTH_SHORT).show()
            }

Для сохранения прошедшего времени в настройках и последующего перехода оттуда

private fun elapsedTime() {
        val endingTime = System.currentTimeMillis()
        val startTime = PrefUtils.getStartTimeValue(this)
        elapsedTime = (-startTime + endingTime)
        PrefUtils.setElapsedTime(elapsedTime, this)
    }
    private fun showElapsedTime() {
        val minut = (PrefUtils.getElapsedTime(this) / 1000) / 60
        val sec = (PrefUtils.getElapsedTime(this) / 1000) % 60
        val elpTime: TextView = findViewById(R.id.elpTime)
        elpTime.text = "Elapsed time: $minut : $sec "
    }

При нажатии кнопки паузы я хочу показать сохраненные значения нескольких времен ..

fabPause.setOnClickListener {
            timer.cancel()
            timerState = TimerState.Paused
            updateButtons()
            showElapsedTime()
        }

Теперь проблема в том, что когда я закрываю приложение после получения одного значения предпочтения, значение времени автоматически удаляется из предпочтений. На следующем сеансе он сохраняется как новый. Хотя я хочу сохранить и показать несколько значений времени в нескольких сеансах. Что мне делать??? Нужна ваша помощь .......!

1 Ответ

0 голосов
/ 22 апреля 2020

Если вы хотите сохранить все временные метки, используя одну и ту же клавишу ElAPSED_TIME_VALUE_ID, вы можете использовать, например, SharedPreferences.Editor.putStringSet(). Или вы можете связать их с такими вещами, как «timestamp1: timestamp2», а затем проанализировать строку вручную.

...