我对kotlin非常陌生,这是我的第一个kotlin MVVM应用程序,实际上应用程序没有运行,请帮我找出我在这里犯的错误。
登录视图模型:
class LoginViewModel (private val loginRepository: LoginRepository) : ViewModel() {
suspend fun login(email: String, password: String) {
viewModelScope.launch {
try {
val loginModel = LoginModel(email, password)
val response = loginRepository.getUsers(loginModel)
Resource.success(data = response)
} catch (ex: Exception) {
Resource.error(data = null, message = ex.message ?: "Error occured!")
}
}
}
}
API助手:
class ApiHelper (private val api: Api) {
suspend fun makeLogin() = api.makeLogin()
}
ViewModelFactory:
class ViewModelFactory (private val apiHelper: ApiHelper) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(LoginViewModel::class.java)) {
return LoginViewModel(LoginRepository(apiHelper)) as T
}
throw IllegalArgumentException("Unknown class name")
}
型号类别:
data class LoginResponse(
val token : String
)
型号等级
data class LoginError(
val error: String
)
存储库:
class LoginRepository(private val apiHelper: ApiHelper) {
suspend fun getUsers(loginModel: LoginModel) = apiHelper.makeLogin()
}
API:
interface Api {
@POST("login")
suspend fun makeLogin(): Response<LoginResponse>
帮帮我,因为我是一个初学者,我参考了很多教程,但我不明白。
我认为您的视图模型没有初始化。使用更新的库初始化活动和片段中的视图模型
implementation "androidx.lifecycle:lifecycle-extension:2.2.0" //for Activty
implementation 'androidx.fragment:fragment-ktx:1.1.0' // for fragment
在下面这样的活动中初始化了loginViewmodel。
val loginViewmodel: LoginViewModel by viewModels()
在下面这样的片段中获取相同loginviewmodel的实例
val loginViewmodel: LoginViewModel by activityViewModels()
在viewmodel中创建方法,以在下面获得类似这样的LoginDepository实例
fun setLoginRepository(loginRepository: LoginRepository){
this.loginRepository = loginRepository
}
在您的案例中,无需将存储库对象传递到视图模型的构造函数中,也无需在活动或视图模型中初始化repo对象。代码的其余部分看起来不错。这可能对你有帮助。如果你需要任何其他帮助,请告诉我。