Проблема с переменными LiveData в ViewModel и передачей данных в ViewAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема с переменными LiveData в ViewModel и передачей данных в View

Сообщение Anonymous »

Ссылка на проект Github
Это мой проект, если у вас есть минутка и вы посмотрите, о чем он, я буду признателен.
Итак, в моем LoginViewModel.kt у меня есть две переменные и немного удовольствия от работы с LiveData:

Код: Выделить всё

private val _loggedInUser = MutableLiveData()
var loggedInUser: LiveData = _loggedInUser
У меня также есть функция извлечения этих переменных:

Код: Выделить всё

private fun fetchLoggedInUser(username: String) {
viewModelScope.launch {
val user = userRepository.getUserByUsername(username)
Log.d("LoginViewModel", "Fetched user: $user")
_loggedInUser.value = user

if (user != null) {
Log.d("LoginViewModel", "_loggedInUser set to: ${_loggedInUser.value}")
Log.d("LoginViewModel", "loggedInUser set to: ${loggedInUser.value}")

} else {
Log.d("LoginViewModel", "No user found for username: $username")
}
}
}
Эта функция также вызывается в функции входа пользователя в LoginViewModel:

Код: Выделить всё

fun login(navController: NavController) {
viewModelScope.launch {
usernameErrorMessage = null
passwordErrorMessage = null

val hashedInputPassword = hashPassword(password)

val user = userRepository.getUser(username, hashedInputPassword)

if (user != null) {
// Pobierz dane użytkownika
fetchLoggedInUser(username)
loginSuccess = true

// Przekazanie nazwy użytkownika do HomepageView
navController.navigate("HomepageView/${user.username}")
} else {
usernameErrorMessage = "Invalid username or password"
passwordErrorMessage = "Invalid username or password"
}
}
}
Журналы показывают, что переменные назначаются:

Код: Выделить всё

2024-10-02 20:45:02.497  7595-7595  LoginViewModel          com.example.pracainynierska          D  Fetched user: User(id=1, username=Andrzej, password=03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4, email=andrzej@wp.pl, userPhotoPath=app/src/main/res/raw/user_photo_2.json)
2024-10-02 20:45:02.497  7595-7595  LoginViewModel          com.example.pracainynierska          D  _loggedInUser set to: User(id=1, username=Andrzej, password=03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4, email=andrzej@wp.pl, userPhotoPath=app/src/main/res/raw/user_photo_2.json)
2024-10-02 20:45:02.497  7595-7595  LoginViewModel          com.example.pracainynierska          D  loggedInUser set to: User(id=1, username=Andrzej, password=03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4, email=andrzej@wp.pl, userPhotoPath=app/src/main/res/raw/user_photo_2.json)
Но эта забава показывает мне, что val userId имеет значение null, и это также есть в LoginViewModel:

Код: Выделить всё

fun updateUserPhotoPath(photoPath: String) {
val userId = loggedInUser.value?.id
Log.d("UserImagePicker", "User ID before updating photo path: ${loggedInUser.value?.id}")
Log.d("UserImagePicker", "New photo path: $photoPath")

if (userId != null) {
Log.d("LoginViewModel", "Updating user photo path for userId: $userId with photoPath: $photoPath")
viewModelScope.launch {
//userRepository.updateUserPhotoPath(userId, photoPath)
}
} else {
Log.d("LoginViewModel", "User ID is null, cannot update photo path.")
}
}
А в HomepageView у меня есть переменная loggedInUser, которая также показывает мне ноль:

Код: Выделить всё

val loggedInUser by loginViewModel.loggedInUser.observeAsState()
**Я не знаю, как читать данные из переменных LiveData в ViewModel и в пользовательском интерфейсе (View), может кто-нибудь помочь?
**
Я не знаю, как читать данные из переменных LiveData в ViewModel и в пользовательском интерфейсе (View), может кто-нибудь помочь?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ta-to-view
Ответить

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

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

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

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

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