Сброс значений каждый день до 0 в Kotlin, Android Studio? - PullRequest
1 голос
/ 03 апреля 2020

У меня проблема с моим счетчиком шагов, я хочу, чтобы он сбрасывался на 0 при каждом изменении даты.

Я пытался сделать что-то вроде этого:

   if (currentDate != savedDate) {
    previousSteps = totalSteps
    tv_totalSteps.text = 0.toString()
    saveData()

}

, но я просто не мог заставить его работать по какой-то причине. Я уверен, что ответ очевиден где-то в моем коде, но я пробовал разные вещи в течение 2 часов. Так что любая помощь будет очень ценится здесь. Вот весь мой код:

private var sensorManager: SensorManager? = null

private var running = false
private var totalSteps = 0f
private var previousSteps = 0f

var currentSteps = 0
var goalSteps = 5000

private var cal = Calendar.getInstance()
private var currentDate = cal.get(Calendar.DAY_OF_YEAR)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    //needs to be called later
    loadData()
    resetSteps()
    sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

}

override fun onResume() {
    super.onResume()
    running = true
    val stepsSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

    if (stepsSensor == null) {
        Toast.makeText(this, "No sensor detected", Toast.LENGTH_SHORT).show()
    } else {
        sensorManager?.registerListener(this, stepsSensor, SensorManager.SENSOR_DELAY_UI)
    }

}


override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
}

override fun onSensorChanged(event: SensorEvent) {
    if (running) {
        totalSteps = event.values[0]
        currentSteps = totalSteps.toInt() - previousSteps.toInt()
        tv_totalSteps.text = ("$currentSteps")

        progress_circular.apply {
            setProgressWithAnimation(currentSteps.toFloat())
        }

        progress_circular_outer_ring.apply {
            setProgressWithAnimation(totalSteps)
        }

        val caloriesBurned = totalSteps * .0228f
        tv_calories.text = "${caloriesBurned.toInt()} calories"
        tv_distance_walked.text = "${currentSteps} steps"
        tv_totalDistanceWalked.text = "${(totalSteps* 0.00076f).toInt()} km"
        tv_totalStepsTaken.text = "${totalSteps.toInt()} steps"

        progress_circular_calories.apply {
            setProgressWithAnimation(caloriesBurned)
        }
    }
}

private fun resetSteps() {
    tv_totalSteps.setOnClickListener {
        Toast.makeText(this, "Long hold to reset steps", Toast.LENGTH_SHORT).show()
    }

    tv_totalSteps.setOnLongClickListener {
        previousSteps = totalSteps
        tv_totalSteps.text = 0.toString()
        saveData()

        true
    }

    tv_totalStepsMax.setOnClickListener {
        tv_totalStepsMax.visibility = View.GONE
        et_totalStepsMax.visibility = View.VISIBLE

        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(et_totalStepsMax, 0)
    }

    rL_wrapper.setOnClickListener {
        tv_totalStepsMax.visibility = View.VISIBLE
        et_totalStepsMax.visibility = View.GONE

        if (et_totalStepsMax.text != null && et_totalStepsMax.text.toString().isNotEmpty()) {
            goalSteps = Integer.parseInt(et_totalStepsMax.text.toString())
            tv_totalStepsMax.text = goalSteps.toString()

            progress_circular.progressMax = goalSteps.toFloat()
            saveData()
        } else {
            return@setOnClickListener
        }
        val inputMethodManager =
            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(et_totalStepsMax.windowToken, 0)


    }
}

override fun onPause() {
    super.onPause()
    saveData()
}

private fun saveData() {
    val sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
    val editor = sharedPreferences.edit()
    editor.putFloat("key1", previousSteps)
    editor.putInt("goalKey", goalSteps)
    editor.putInt("DATE_KEY", currentDate)
    Log.d("MainActivity", "Today is $currentDate")
    editor.apply()
}

private fun loadData() {
    val sharedPreferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
    val savedNumber = sharedPreferences.getFloat("key1", 0f)
    val goalNumber = sharedPreferences.getInt("goalKey", 0)
    val savedDate = sharedPreferences.getInt("DATE_KEY", 0)
    Log.d("MainActivity", "Saved date is $savedDate")


    if (currentDate != savedDate) {
        previousSteps = totalSteps
        tv_totalSteps.text = 0.toString()
        saveData()

    }

        Log.d("MainActivity", "$savedNumber")
        goalSteps = goalNumber
        tv_totalStepsMax.text = goalSteps.toString()
        previousSteps = savedNumber


}

}

1 Ответ

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

Вы просто переписываете tv_totalStepsMax.text = goalSteps.toString() после сброса значения tv_totalSteps.text = 0.toString().

Код должен выглядеть следующим образом:

if (currentDate != savedDate) {
    tv_totalSteps.text = 0.toString()
    ...
    saveData()
} else {
    tv_totalStepsMax.text = goalSteps.toString()
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...