首页 > 解决方案 > 我无法弄清楚我的 Kotlin 代码中的问题?

问题描述

  1. LoginViewModel中,我无法弄清楚我应该在 "if (result is ....) 中写什么,因为我写的东西都是红色的。
  2. LoginRepository“when is ->”中变为红色。我不知道为什么?
  3. 而且LoginDataSource我不知道如何解决代码。

我将不胜感激任何帮助。

登录视图模型:

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)
    }
}

登录存储库:

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

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

登录数据源:

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

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

标签: android-studiokotlin

解决方案


  1. 如果我正确理解Success类继承Result类:

    val result = loginRepository.login(username, password)
    if (result is Success) {
        ...
    }
    
  2. 更改loginLoginRepository 中函数的签名以返回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

推荐阅读