Я не могу понять проблемы в моем коде Kotlin? - PullRequest
0 голосов
/ 20 июня 2020
  1. В LoginViewModel, я не могу понять, что я должен написать в «если (результат ...), потому что все, что я напишу, оказывается красным.
  2. В LoginRepository "when is ->" становится красным. Я не знаю почему?
  3. А в LoginDataSource я не знаю, как решить код.

I был бы признателен за любую помощь.

LoginViewModel:

fun login(username: String, password: String) {
    // can be launched in a separate asynchronous job
    val result: String = loginRepository.login(username, password).toString()

    if (result is Success.data) {
        _loginResult.value =
            LoginResult(success = LoggedInUserView(displayName = "Login Success"))
    } else {
        _loginResult.value = LoginResult(error = R.string.login_failed)
    }
}

LoginRepository:

fun login(username: String, password: String) {
    // handle login
    val result = dataSource.login(username, password)

    when (result) {
        is ->  Success(data = LoggedInUser(displayName = "Login Success"))   
    } 
}

LoginDataSource:

fun login(username: String, password: String): Result.Success<LoggedInUser> {
    try {
        //TODO:handleloggedInUserauthentication 
    }
}

fun logout() {
     // TODO: revoke authentication
}

1 Ответ

0 голосов
/ 20 июня 2020
  1. Если я правильно понимаю Success класс наследует Result класс:

    val result = loginRepository.login(username, password)
    if (result is Success) {
        ...
    }
    
  2. Измените подпись функции login в LoginRepository, чтобы вернуть Result:

    fun login(username: String, password: String): Result.Success<LoggedInUser> {
         // ...
         return when (result) {
             is Success ->  Success(data = LoggedInUser(displayName = "Login Success"))
             else -> Error()
         }
    }
    
  3. В источнике данных для входа сделайте запрос к любому используемому вами API, обработайте ответ, создайте и верните объект Success или Error в зависимости от ответа.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...