Не может получить данные от Firestore - работает только после перезапуска приложенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Не может получить данные от Firestore - работает только после перезапуска приложения

Сообщение 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)

Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-the-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»