У меня есть действие, когда пользователь должен войти в систему. Как только пользователь входит в систему, информация о пользователе загружается в Firebase, что наблюдается с использованием LiveData
в действии.
Проблема в том, что, несмотря на успешную загрузку данных, LiveData показывает, что произошла ошибка.
Активность
class LoginActivity : AppCompatActivity() {
private val RC_SIGN_IN = 123
private val viewModel by viewModel<LoginViewModel>() // Lazy inject ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
loginUser()
observeLoginLiveData()
}
private fun observeLoginLiveData() {
viewModel.onAuthenticationSuccessful().observe(this, Observer { result ->
when (result) {
is Result.Loading -> {
}
is Result.Success<*> -> {
startActivity(Intent(this, MainActivity::class.java))
finish()
}
is Result.Error -> {
clLogin.showSnackbar(R.string.error_login) {}
Timber.e(result.errorMessage)
}
}
})
}
}
ViewModel
class LoginViewModel(val repo: LoginRepository) : ViewModel() {
private val _loginLiveData = MutableLiveData<Result>()
private val loginLiveData: LiveData<Result>
get() = _loginLiveData
fun onAuthenticationSuccessful(): LiveData<Result> {
_loginLiveData.value = Result.Loading
viewModelScope.launch {
_loginLiveData.value = repo.uploadUserDetails()
}
return loginLiveData
}
}
Репозиторий
class LoginRepository {
suspend fun uploadUserDetails(): Result {
val response = withContext(Dispatchers.IO) {
val currentUser = FirebaseUtils.getCurrentUser()
val user = User(currentUser?.displayName, currentUser?.email, currentUser?.photoUrl.toString())
FirebaseFirestore.getInstance()
.collection(FirebaseReferences.COLLECTION_USERS)
.add(user)
}
return if (response.isSuccessful) {
Result.Success("true")
} else {
Result.Error("Error uploading user data")
}
}
}
Я также пытался использовать response.isComplete
, но он также возвращает false каждый раз.
Я не знаю, что мне здесь не хватает.Любая помощь будет оценена.Спасибо.