LiveData-Update löst keine Neukompostierung aus [geschlossen]Android

Forum für diejenigen, die für Android programmieren
Anonymous
 LiveData-Update löst keine Neukompostierung aus [geschlossen]

Post by Anonymous »

Ich entwickle eine Android-Anwendung, die im ViewModel eine LoginResponse von LiveData aktualisiert.

In meiner mainActivity beobachte ich diese Variable mit der Funktion „obobAsState“. Wenn ich jedoch den Wert in meinem ViewModel aktualisiere, wird die LoginScreen-Methode nicht ausgelöst.
Was kann möglicherweise falsch sein? Sollte die ObservAsState-Methode nicht die Neuzusammensetzung des LoginScreen auslösen, wenn sie einen neuen Wert erhält?
Hier ist der relevante Code:
doctorViewModel:

Code: Select all

    // LiveData for login response
private val _loginResponse = MutableLiveData(null)
val loginResponse: LiveData get() = _loginResponse

suspend fun login(email: String, password: String): String? {
return withContext(Dispatchers.IO) {
try {
val LoginRequest = LoginRequest(email , password)
val response =  repository.login(email , password = password)
println("login method : ${response}")
_loginResponse.value = response
invokeAuthToken = true
invokeLoginScreen = true
response
//                // Retrofit makes the network call in the background thread
//                if (response.isSuccessful) {
//                    response.body()   // the JWT token string
//                } else {
//                    null
//                }

} catch (e: Exception) {
null
}
}
}

**mainActivity:**

val loginResponse by viewModel.loginResponse.observeAsState()

if ((viewModel.loginResponse != null)&& (openUserLoginScreen)) {
LoginScreen(
viewModel = viewModel
)
}
if (openUserLoginScreen) {
LoginPopup(
userName = userName,
password = userPassword,
onDismiss = {
viewModel.openUserLoginScreen = false
if (viewModel.loginIconClicked == false) {
viewModel.loginIconClicked = false
}
if (viewModel.logOutIconClicked == true) {
viewModel.logOutIconClicked = false
viewModel.loginIconClicked = false
}
},
viewModel = viewModel)
}

@Composable
fun LoginScreen(
viewModel: DoctorViewModel,
) {
println("LoginScreen COMPOSED")

val loginResponse = viewModel.loginResponse.value
val loginError = viewModel.loginError.observeAsState()
println("LoginScreen : ${loginResponse}")

// SUCCESS ---------------------------------------------------------
LaunchedEffect(loginResponse) {
loginResponse?.let { token ->
println("LoginScreen: Received login token = $token")

viewModel.setOwnAuthToken(token)
viewModel.setOwnInvokeAuthToken(false)
viewModel.setOwnGetUserDetails(true)
viewModel.setOwnUserLoginCompleted(true)
viewModel.setOwnOpenUserLoginScreen(false)
}
}

// FAILURE ---------------------------------------------------------
LaunchedEffect(loginError.value) {
loginError.value?.let { error ->
println("LoginScreen: Login error = $error")

viewModel.setOwnOpenUserLoginScreen(true)
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post