#android #kotlin #apply
#Android #kotlin #применить
Вопрос:
Я создал следующую функцию для генерации события обработчика каждые 15 секунд. Он начинается с заданного флага, когда я передаю False, я хочу, чтобы обработчик остановил свой цикл. Вот мой фрагмент кода в Kotlin:
private fun getSalesData(session:Boolean,delayMs:Long,salesRequest: JsonObjectRequest){
lateinit var runnable: Runnable
if (session) {
HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
}
Handler().apply {
runnable = object : Runnable {
override fun run() {
HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
Log.d(TAG, "se esta repitiendo cada 15 segs mamahuevo")
postDelayed(this, delayMs)
}
}
postDelayed(runnable, delayMs)
if (!session){
Log.d(TAG,"entre aca como todo un crack")
Handler().removeCallbacksAndMessages(runnable)
}
}
if(!session){
Log.d(TAG,"aanopqwwwwww")
Handler().removeCallbacksAndMessages(runnable)
}
}
Ответ №1:
Немного сложно понять, что именно вы хотите сделать, но вот возможное решение:
private fun getSalesData(session:Boolean,delayMs:Long,salesRequest: JsonObjectRequest){
lateinit var runnable: Runnable
if (session) {
HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
}
Handler().apply {
runnable = object : Runnable {
override fun run() {
HttpRequestSingleton.getInstance(this@NavBarActivity).addToRequestQueue(salesRequest)
Log.d(TAG, "se esta repitiendo cada 15 segs mamahuevo")
postDelayed(this, delayMs)
}
}
postDelayed(runnable, delayMs)
if (!session){
Log.d(TAG,"entre aca como todo un crack")
removeCallbacks(runnable) // just call this method, as part of your handler object
}
}
if(!session){
Log.d(TAG,"aanopqwwwwww")
removeCallbacks(runnable)// just call this method, as part of your handler object
}
}
Обновление: Извините, не видел, что вы использовали removeCallbacksAndMessages
. removeCallbacks
удалит все выполняемые файлы в очереди
Комментарии:
1. Да, я пытался использовать removeCallbacks, но он не работает. Я предполагаю, что для вызова с помощью экземпляра apply{} нужен особый способ. Я не знаю, что я делаю не так.
2. Не используйте Handler(). перед вызовом этого метода в apply{}