android - 在 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
}
}
解决方案
您只是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()
...
}
推荐阅读
- reactjs - 构建应用程序后创建反应应用程序配置文件
- xml - 将xml中的多个节点转换为Tsql中的逗号分隔列表
- sql - 将 clob 转换为 xmltype,什么是最快的 xmltype() 或 xmlparse(document ...)
- logstash-grok - Grok 过滤器 - 检查字段是否存在
- oop - 创建正确的对象关系
- scala - 从未解析的文本字符串中创建数据框
- microsoft-translator - Microsoft 自定义翻译器:文件上传不适用于 SC tmx 文件
- google-analytics - Google Analytics(分析)Google API 错误 403:“用户没有任何 Google Analytics(分析)帐户”
- laravel - Laravel 将两列从低到高排序
- java - 随机数猜测器 - 无法输入