【发布时间】:2020-04-10 06:07:43
【问题描述】:
我正在尝试实例化我的视图模型,但出现此错误
引起:java.lang.NoSuchMethodException:[类 com.test.domain.PostUserTokenImpl] 在 java.lang.Class.getConstructor0(Class.java:2327) 在 java.lang.Class.getConstructor(Class.java:1725) 在 com.test.presentation.viewmodel.LoginVMFactory.create(LoginVMFactory.kt:13)
我尝试做一个我的 ViewModel 的实例,它持有和接口
查看
private val viewModel by lazy { ViewModelProviders.of(this, LoginVMFactory(PostUserTokenImpl(UserRepoImpl()))).get(LoginViewModel::class.java) }
登录虚拟机工厂
class LoginVMFactory(private val useCase: PostUserTokenImpl):ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor(PostUserTokenImpl::class.java).newInstance(useCase)
}
}
登录视图模型
class LoginViewModel(private val useCase: PostUserToken): ViewModel() {
...
}
PostUserToken
interface PostUserToken {
suspend fun postUserToken(user: User): Resource<Boolean>
}
PostUserTokenImpl
class PostUserTokenImpl(private val repo: UserRepo): PostUserToken {
override suspend fun postUserToken(user:User):Resource<Boolean> = repo.saveUserToken(user)
}
知道为什么会这样吗?我怀疑这可能是因为我们无法使用我们的视图模型的接口来实例化?
【问题讨论】:
标签: android kotlin mvvm android-mvvm