这是我的存储库管理器
@Singleton
class RepositoryManager @Inject constructor(private val retrofit: Retrofit) {
fun <T> obtainRetrofitService(serviceClass: Class<T>): T {
return retrofit.create(serviceClass)
}
}
class GankViewModel @ViewModelInject constructor() : BaseViewModel() {
@Inject lateinit var repositoryManager: RepositoryManager
fun getGankGirl() {
repositoryManager.obtainRetrofitService(GankApi::class.java)
.getGankGirls()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : BaseObserver<GirlBean>() {
override fun success(data: GirlBean) {
showLoading(true)
}
})
}
}
@AndroidEntryPoint
class GankActivity : BaseActivity<ActivityGankBinding, GankViewModel>() {
override fun init() {
viewModel.getGankGirl()
}
}
abstract class BaseActivity<VB : ViewBinding, VM : BaseViewModel> :RxFragmentActivity(),
IBaseView {
protected lateinit var binding: VB
protected lateinit var viewModel: VM
private val loading: BasePopupView by lazy {
XPopup.Builder(this).asCustom(LoadingSimplePopup(this))
}
@Suppress("UNCHECKED_CAST")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val type = javaClass.genericSuperclass as ParameterizedType
val modelProvider = ViewModelProvider(this)
val clazz0 = type.actualTypeArguments[0] as Class<VB>
val method = clazz0.getMethod("inflate", LayoutInflater::class.java)
binding = method.invoke(null, layoutInflater) as VB
setContentView(binding.root)
val clazz1 = type.actualTypeArguments[1] as Class<VM>
viewModel = modelProvider.get(clazz1)
init()
viewModel.loadingEvent.observe(this, { isShow ->
if (isShow) showLoading() else dismissLoading()
})
}
abstract fun init()
override fun showLoading() {
if (!loading.isShow) {
loading.show()
}
}
override fun dismissLoading() {
if (loading.isShow) {
loading.dismiss()
}
}
}
和例外情况:
您只需要修复您的ViewModel
class GankViewModel @ViewModelInject constructor(var repositoryManager: RepositoryManager) : BaseViewModel() {
... }
如果你能再检查一遍
我只是从喷气背包和剑柄开始。但是当我注入到ViewModel中时,我遇到了一些问题。 我得到的错误: 我可以在活动中注入所有细节,但不能在ViewModel中注入。我已经尝试了所有我能找到的解决办法。 我的gradle文件: 项目根级别: 模块级: 我的申请文件 我的模块文件: 项目是具有可组合屏幕的单个活动,因此主要活动: 视图模型: 我尝试过的事情: 改为ViewModelComponent而
这是我的束缚 错误在于 /Users/X/AndroidStudioProjects/Corotuines/app/build/generated/source/kapt/debug/com/example/corotuines/application/ApplicationMain_HiltComponents.java:126:错误:[Dagger/Mis的绑定]com.example.cor
我试着把一个简单的viewModel交给一个composable,每次出现这个错误,我都不知道这意味着什么: 我的分级: 我创建了一个文件 并将其设置在清单中。 我创建了文件: 然后在我的中设置并创建一个,如下所示: 在我的导航中的处调用: null
我通过MVVM模式和谷歌jetpack依赖性开发了一个应用程序。我有一个,它有一个我需要的方法。我有两个视图,分别是和,首先我在中创建了实例,并通过ViewModel向观察者订阅LiveData: 现在,我将在中执行操作方法,并观察 但我跟踪创建实例
ViewModels是独立于activity/片段生命周期还是仅仅独立于其配置更改。它们何时将不再存在,随后的onCleared()方法将被调用。viewModel可以与另一个activity共享吗? 一种情况: 这种分享是否可能,是否是一种好的做法。 此外,由于应用程序生命周期回调,onpause->onstop->ondestroy对这两个程序都是相同的 1.activity旋转和 2.act
我正在使用匕首2,我有一个定义如下的: 这是FYViewModel的: 但是,变量始终为空。 如何使用匕首2将Repositroy注入我的ViewModel?