https://kotlinlang.org logo
Title
b

Baudouin

05/14/2023, 2:37 PM
Hello, Petite question sur l'utilisation de
Date()
J'essaie d'enregistrer un interval (un peu comme un timer) donc j'enregistre une date de départ puis une date de d'arrivé dans un objet. Voici mon code :
val recordingContraction = remember { mutableStateOf(false) }
var startTime: Date = Date()

    fun onAddButtonClicked() {
        if (recordingContraction.value) {
            viewModel.contractionUiState.copy(startTime = startTime, endTime = Date())
            coroutineScope.launch {
                viewModel.saveContraction()
            }
            recordingContraction.value = false
        } else {
            recordingContraction.value = true
            startTime = Date()
        }
    }
Ce qui est étrange c'est que à l'enregistrement mon startTime et mon endTime sont les mêmes, comme si tout était initialisé au moment de l'enregistrement. Est ce que quelqu'un aurait une petite idée ? PS : j'utilise Date et pas LocalDateTime parce que je dois enregistrer dans Room.
b

bmo

05/15/2023, 7:33 AM
Tu ne nous donnes pas assez d'infos pour être sûr de ce qui se passe mais à priori, ton problème c'est que ton startTime n'est pas dans un
remember
, il est donc écrasé à chaque fois que ton composable est exécuté
r

Renaud

05/15/2023, 8:19 AM
tu utilises
java.util.Date
?
b

Baudouin

05/15/2023, 1:32 PM
@Renaud yes !
@bmo Merci ! Effectivement j'ai oublié de mettre un remember, cela dit ça ne semble pas fonctionner mieux avec, je creuse et je reviens si je trouve pas 😉
r

Renaud

05/15/2023, 1:33 PM
Par rapport à ton modèle de données, je pense que tu devrais regarder si possible du côté de
java.time
(il faut desugar + java 1.8) et utiliser
Duration
(pour un intervalle en time) ou
Interval
(pour un interval en jours). Ca se construit très bien avec des
LocalDateTime
b

Baudouin

05/15/2023, 1:52 PM
Ok @Renaud, de toute façons je pensais effectivement faire une refacto dès que j'aurai réglé ce problème pour passer sur LocalDateTime et faire un truc plus propre. Mais je regarderai Duration alors effectivement !
@bmo il manque quoi comme info ahah ? En gros la fonction est lancé dès qu'on appuie sur un FAB qui est dans le scaffold de ma page. Le but etant de faire un compteur. ça lance le compteur et quand on réappuie ça le termine. Et ensuite c'est sensé enregistrer un objet dans la BDD avec une date de début et une date de fin.
Ce qui est étrange c'est que dans mes logs mon log de
startTime
de
fin
n'est pas égal à celui de
début
C'est donc que malgré le remember il continue à être écrasé.
val coroutineScope = rememberCoroutineScope()
val recordingContraction = remember { mutableStateOf(false) }
var startTime by remember { mutableStateOf(Date()) }

fun onAddButtonClicked() {
    Log.e("fonction", startTime.toString())
    if (recordingContraction.value) {
        Log.e("fin", startTime.toString())
        viewModel.contractionUiState.copy(startTime = startTime, endTime = Date())
        coroutineScope.launch {
            viewModel.saveContraction()
        }
        recordingContraction.value = false
    } else {
        Log.e("debut", startTime.toString())
        recordingContraction.value = true
        startTime = Date()
    }
}