this is my RepositoryManager
@Singleton class RepositoryManager @Inject constructor(private val retrofit: Retrofit) { fun <T> obtainRetrofitService(serviceClass: Class<T>): T { return retrofit.create(serviceClass) } } ViewModel:
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) } }) } } Activity:
@AndroidEntryPoint class GankActivity : BaseActivity<ActivityGankBinding, GankViewModel>() { override fun init() { viewModel.getGankGirl() } } BaseActivity:
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() } } } and the EXCEPTION :
https://stackoverflow.com/questions/65515947/how-can-i-user-hilt-inject-repositorymanager-for-viewmodelviewmodel-creat-by-in December 31, 2020 at 10:31AME/AndroidRuntime: FATAL EXCEPTION: main Process: com.kotlin, PID: 20050 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kotlin/com.cmy.domain.ui.gank.ui.GankActivity}: kotlin.UninitializedPropertyAccessException: lateinit property repositoryManager has not been initialized at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3897) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8349) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) Caused by: kotlin.UninitializedPropertyAccessException: lateinit property repositoryManager has not been initialized at com.cmy.domain.ui.gank.vm.GankViewModel.getGankGirl(GankViewModel.kt:19) at com.cmy.domain.ui.gank.ui.GankActivity.init(GankActivity.kt:32) at com.cmy.common.ui.base.BaseActivity.onCreate(BaseActivity.kt:38) at com.cmy.domain.ui.gank.ui.Hilt_GankActivity.onCreate(Hilt_GankActivity.java:30) at android.app.Activity.performCreate(Activity.java:8085) at android.app.Activity.performCreate(Activity.java:8073) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3870) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4076) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2473) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8349) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
没有评论:
发表评论