首页 > 解决方案 > 在 Kotlin、Android Studio 中每天将值重置为 0?

问题描述

我的计步器有问题,我希望每次日期更改时将其重置为 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


}

}

标签: androidkotlin

解决方案


您只是tv_totalStepsMax.text = goalSteps.toString()在重置 value 后重写tv_totalSteps.text = 0.toString()

代码应如下所示:

if (currentDate != savedDate) {
    tv_totalSteps.text = 0.toString()
    ...
    saveData()
} else {
    tv_totalStepsMax.text = goalSteps.toString()
    ...
}

推荐阅读