Hello, Petite question sur l'utilisation de `Date(...
# french
b
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 :
Copy 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
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
tu utilises
java.util.Date
?
b
@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
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
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é.
Copy code
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()
    }
}