Функция сохраняет максимальную скорость - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь сделать функцию, которая будет сохранять только более высокую скорость, чем та, что уже сохранена.Но переменная вне цикла if всегда равна 0.0, внутреннее значение отличается.Кто-нибудь знает какое-то решение или даже лучшую идею, как сохранить только максимальную скорость?

private fun updateUI(speed: Double, distance: Double){
    val df = DecimalFormat("0.0")
    speed_text_view.text = df.format(speed).plus(" km/h")
    distance_text_view.text = df.format(distance)
    Log.e("getLocationUpdates", df.format(speed))

    var getSpeedDouble = 0.0 //here is problem. The value doesn't change

    if (speed > getSpeedDouble) {
        val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
        val editor = sharedPref.edit()
        editor
            .putString("SPEED", speed.toString())
            .apply()

        val getSharedPref = PreferenceManager.getDefaultSharedPreferences(this)
        getSharedPref.apply {
            val getSpeed = getString("SPEED", "")
             getSpeedDouble = getSpeed!!.toDouble()
            Log.e("GetSpeedDouble", getSpeedDouble.toString())
             max_speed_text_view.text = getSpeed.toString()

        }
    }
}

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

Для потомков: скорость должна быть глобальной переменной.

val speed:Double = 0.0

при загрузке действия извлекает его значение из общих настроек:

val preference = getSharedPreferences(yourApp, Context.MODE_PRIVATE)
val editor = preference.edit()
speed = preference.getDouble(“SPEED”,0.0)

после завершения операции запишите значение обратно в общие настройки:

editor.putDouble(“SPEED”,speed)
editor.commit()

в вашем методе просто назначьте новое значение переменной, только если текущее значение больше, чем сохраненное значение.

private fun updateUI(newSpeed:Double) {
  if (newSpeed > speed)
  {
    speed = newSpeed
    textview.setText((newSpeed).toString())
  }
}
1 голос
/ 20 сентября 2019

Как насчет того, чтобы поместить его в хороший класс, и когда вы просто инициализируете этот класс из своей деятельности: speedKeeper = MaxSpeedKeeper(this), тогда все, что вам нужно сделать, - это понизить вашу скорость (т.е. speedKeeper.speed = 10.4), и она останется обновленной.Apply() обновится до дисковой асинхронности, но значение в инициализированном sharedPref останется в кеше и все равно будет считано из companion object 'maxSpeed.

Таким образом, вы можете просто удалить speedkeeper в любых других процессах, классах, фрагментах и ​​т. Д., И он будет продолжать делать то, что делает, или просто инициализировать его снова в новом действии.

class MaxSpeedKeeper(context: Context) {
    companion object {
        const val SPEED = "SPEED"
        const val SHAREDPREFS_NAME = "MY_SHAREDPREFS"
        var maxSpeed = 0.0f
    }
    var speed: Double
    get() = maxSpeed.toDouble()
    set(speedToCheck) {
        if (speedToCheck > maxSpeed) {
            maxSpeed=speedToCheck.toFloat()
            with(sharedPref.edit()) {
                putFloat(SPEED, speedToCheck.toFloat()) // you could change this to a string or bits or something if you want more resolution than a float gives
                apply()
            }
        }
    }
    private val sharedPref =
        context.getSharedPreferences(SHAREDPREFS_NAME, Context.MODE_PRIVATE)
    init {
        maxSpeed = sharedPref.getFloat(SPEED, 0.0f)
    }
}
0 голосов
/ 19 сентября 2019
private fun updateUI(speed: Double) {
            var getSpeedDouble = 0.0 //here is problem. The value doesn't change
            if (speed > getSpeedDouble) {
                val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
                val editor = sharedPref.edit()
                editor.putString("SPEED", speed.toString()).apply()
                val defaultSpeed = sharedPref.getString("SPEED", "")
                getSpeedDouble = defaultSpeed.toString().toDouble()
                Log.e("updateUI", getSpeedDouble.toString())
            }
        }

        private fun getSpeed() {
            var getSpeedDouble: Double
            val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
            val defaultSpeed = sharedPref.getString("SPEED", "")
            getSpeedDouble = defaultSpeed.toString().toDouble()
            Log.e("getSpeed", getSpeedDouble.toString())
        }

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        updateUI(10.0)
        getSpeed()
    }

вывод

updateUI: 10.0 getSpeed: 10.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...