我试图在https://developer.android.com/jetpack/docs/guide上实现这个例子.这解释了如何构建tan android应用程序.
java.lang.class<com.example.UserProfileviewmodel> has no zero argument constructor
我可以弄清楚这个错误与之有关
viewmodel = viewmodelProviders.of(this).get(UserProfileviewmodel.class);
当我为viewmodel编写默认的零输入构造函数时,我收到以下错误.
Attempt to invoke virtual method 'void android.arch.lifecycle.LiveData.observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' on a null object reference
解决方法:
如果你想在你的Fragment中提供带有构造函数的viewmodel作为依赖项,那么有一种不同的方法,
class SampleViewmModel(dataManager:DataManager):viewmodel(){
//some logic
}
然后你需要创建一个工厂类来支持上面的viewmodel,如下所示,
class SampleFactory @Inject constructor(var dataManager:DataManager): viewmodelProvider.Factory {
override fun <T : viewmodel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(Sampleviewmodel::class)) {
return Sampleviewmodel(dataManager) as T
}
throw IllegalStateException()
}
}
现在在你的模块类中,你可以按如下方式注入上面的类,(Note-Datamanager类是可注入的)
//Provide Factory
@Provides
fun provideFactory(dataManager:DataManager): SampleFactory {
return SampleFactory(dataManager)
}
//Provide actual viewmodel
@Provides
fun provideviewmodel(sampleFactory: SampleFactory): Sampleviewmodel {
return viewmodelProviders.of(fragment, sampleFactory)[Sampleviewmodel::class]
}
在你的Fragment中没有,你可以像任何其他依赖一样注入你的viewmodel,
@Injetct
lateinit viewmodel:Sampleviewmodel
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。