Я хочу обновить данные в Firebase после завершения работы приложения. Как мне это сделать
Я использовал onDestroy
и onPause
, но они не выполняли нужную мне функцию. Когда я использую OnPause, каждый раз, когда приложение переходит в фоновый режим, оно выполняет операцию обновления, а мне этого тоже не хочется.
// This onDestroy didn't work OnPause, every time the application goes to the background
override fun onDestroy() {
super.onDestroy()
Log.d("ClosingService", "Service is destroyed. Updating user data...")
Update_User_Data(dataManager.userDataList)
}
fun Update_User_Data(newDataList : ArrayList<User_Structure>){
val tasks = newDataList.map { i ->
val userRef = db.collection("users").document(i.userId)
userRef.update(mapOf(
"username" to i.username,
"favorites" to i.favorites,
"parts" to i.parts,
"points" to i.points
))
}
Tasks.whenAllComplete(tasks).addOnCompleteListener {
if (it.isSuccessful) {
println("All user data updated successfully!")
} else {
println("Error updating some user data.")
}
}
}
Пожалуйста, обновите вопрос, объяснив, почему вы пытаетесь это сделать, или конкретную проблему, которую вы пытаетесь решить. Возможно, то, что вы пытаетесь сделать, либо на самом деле невозможно, либо вообще нецелесообразно, либо даже не необходимо. Мы не знаем, потому что не понимаем вариант использования, который вы пытаетесь реализовать.
Я хочу обновить данные в Firebase после завершения работы приложения.
Нет никакой гарантии, что onDestroy() будет вызван — приложение может «внезапно» завершиться по ряду причин. Вместо этого вы можете посмотреть что-то вроде onSaveInstanceState().
@MarsAtomic Спасибо, я сделал, как вы сказали, спасибо за помощь.
Я использовал OnDestroy и OnPouse, но они не выполняли нужную мне функцию.
Имейте в виду, что onDestroy не всегда вызывается . Так что на это нельзя полагаться. Как уже упоминал @MarsAtomic в своем комментарии, вам следует рассмотреть возможность использования onSaveInstanceState() вместо этого:
Вызывается для получения состояния каждого экземпляра активности перед ее уничтожением, чтобы состояние можно было восстановить в
onCreate(Bundle)
илиonRestoreInstanceState(Bundle)
.
Спасибо, я сделал то, что вы сказали, и настроил отправку запросов только при обновлении объекта данных. Если у меня возникнет проблема, на этот раз я сохраню избранное локально, выполню там операции с любимыми словами и настрою обновление других данных после тестовых решений.
«пользователь закрывает приложение» — как вы это понимаете?