У меня есть эта структура базы данных в базе данных Firestore < /p>
users (email, firstName, lastName, ...etc)
pets (userId, name, type, ...etc)
users' email => pets' userId
< /code>
В моем коде Android я использую NavhostController с ViewModels. < /p>
Вот как он должен работать: < /p>
check if User is logged in
-> User's logged in
-> get User data from Firestore database
-> retreiving User's data successfully
-> check User has any Pets Yes has Pets : go to Pets List screen
-> No Pets : go to Form screen to insert Pets info.
-> Not logged in : go to Sign up or Login screen
< /code>
В первый раз, когда я протестировал приложение, я зарегистрировался сначала, вошел в систему, затем заполнил форму информации о домашних животных - все казалось хорошим.
, затем я вышел в систему и вошел в систему, но я больше не мог видеть экран списка домашних животных. Это продолжало отвлекать меня к экрану формы.
То же самое происходит, когда я удаляю данные приложения и вхожу в систему. Мессер, и я больше не могу доверять CHATG@Composable
fun NavigationGraph(
navController: NavHostController,
authViewModel: AuthViewModel,
petViewModel: PetViewModel
) {
val authResult by authViewModel.authResult.observeAsState()
val currentUser by authViewModel.currentUser.observeAsState()
val userHasPets by petViewModel.userHasPets.observeAsState()
LaunchedEffect(authResult, currentUser) {
authResult?.let {
when (it) {
is Result.Success -> {
if (it.data) {
val email = currentUser?.email
if (email != null) {
val hasPets = petViewModel.hasPetsSuspend(email)
hasPets.let { has ->
if (has) {
navController.navigate(Screen.PetsListScreen.route) {
popUpTo(Screen.LoginScreen.route) { inclusive = true }
}
} else {
navController.navigate(Screen.PetInfoScreen.route) {
popUpTo(Screen.LoginScreen.route) { inclusive = true }
}
}
}
< /code>
petviewmodel part < /li>
< /ul>
class PetViewModel(
private val authViewModel: AuthViewModel
) : ViewModel() {
private val petRepository: PetRepository
private val _userHasPets = MutableLiveData()
val userHasPets: LiveData get() = _userHasPets
init {
petRepository = PetRepository(Injection.instance())
val currentUser = authViewModel.currentUser
currentUser.value?.email?.let { email ->
checkUserHasPets(email)
}
}
suspend fun hasPetsSuspend(userId: String): Boolean =
when (val r = petRepository.getPetsByUserId(userId)) {
is Success -> r.data.isNotEmpty()
else -> false
}
< /code>
petrepository part < /li>
< /ul>
class PetRepository(private val firestore: FirebaseFirestore) {
suspend fun getPetsByUserId(userId: String): Result = try {
val querySnapshot = firestore.collection("pets")
.whereEqualTo("userId", userId)
//.get(Source.SERVER)
Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-the-app
Не может получить данные от Firestore - работает только после перезапуска приложения ⇐ Android
Форум для тех, кто программирует под Android
1746076526
Anonymous
У меня есть эта структура базы данных в базе данных Firestore < /p>
users (email, firstName, lastName, ...etc)
pets (userId, name, type, ...etc)
users' email => pets' userId
< /code>
В моем коде Android я использую NavhostController с ViewModels. < /p>
Вот как он должен работать: < /p>
check if User is logged in
-> User's logged in
-> get User data from Firestore database
-> retreiving User's data successfully
-> check User has any Pets Yes has Pets : go to Pets List screen
-> No Pets : go to Form screen to insert Pets info.
-> Not logged in : go to Sign up or Login screen
< /code>
В первый раз, когда я протестировал приложение, я зарегистрировался сначала, вошел в систему, затем заполнил форму информации о домашних животных - все казалось хорошим.
, затем я вышел в систему и вошел в систему, но я больше не мог видеть экран списка домашних животных. Это продолжало отвлекать меня к экрану формы.
То же самое происходит, когда я удаляю данные приложения и вхожу в систему. Мессер, и я больше не могу доверять CHATG@Composable
fun NavigationGraph(
navController: NavHostController,
authViewModel: AuthViewModel,
petViewModel: PetViewModel
) {
val authResult by authViewModel.authResult.observeAsState()
val currentUser by authViewModel.currentUser.observeAsState()
val userHasPets by petViewModel.userHasPets.observeAsState()
LaunchedEffect(authResult, currentUser) {
authResult?.let {
when (it) {
is Result.Success -> {
if (it.data) {
val email = currentUser?.email
if (email != null) {
val hasPets = petViewModel.hasPetsSuspend(email)
hasPets.let { has ->
if (has) {
navController.navigate(Screen.PetsListScreen.route) {
popUpTo(Screen.LoginScreen.route) { inclusive = true }
}
} else {
navController.navigate(Screen.PetInfoScreen.route) {
popUpTo(Screen.LoginScreen.route) { inclusive = true }
}
}
}
< /code>
petviewmodel part < /li>
< /ul>
class PetViewModel(
private val authViewModel: AuthViewModel
) : ViewModel() {
private val petRepository: PetRepository
private val _userHasPets = MutableLiveData()
val userHasPets: LiveData get() = _userHasPets
init {
petRepository = PetRepository(Injection.instance())
val currentUser = authViewModel.currentUser
currentUser.value?.email?.let { email ->
checkUserHasPets(email)
}
}
suspend fun hasPetsSuspend(userId: String): Boolean =
when (val r = petRepository.getPetsByUserId(userId)) {
is Success -> r.data.isNotEmpty()
else -> false
}
< /code>
petrepository part < /li>
< /ul>
class PetRepository(private val firestore: FirebaseFirestore) {
suspend fun getPetsByUserId(userId: String): Result = try {
val querySnapshot = firestore.collection("pets")
.whereEqualTo("userId", userId)
//.get(Source.SERVER)
Подробнее здесь: [url]https://stackoverflow.com/questions/79601401/fails-to-get-data-from-firestore-works-only-after-restarting-the-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия