kotlin Android Hilt -多模块项目转换错误

mwkjh3gx  于 2023-08-07  发布在  Kotlin
关注(0)|答案(2)|浏览(171)

我试图使用刀柄为我的项目包含动态功能。我犯了一个错误,我不能完全理解为什么。我得到一个类似这样的错误:

java.lang.ClassCastException: com.social.analysis.DaggerApp_HiltComponents_ApplicationC$ActivityRetainedCImpl$ActivityCImpl$FragmentCImpl cannot be cast to com.social.login.intro.IntroFragment_GeneratedInjector
    at com.social.login.intro.Hilt_IntroFragment.inject(Hilt_IntroFragment.java:94)
    at com.social.login.intro.Hilt_IntroFragment.initializeComponentContext(Hilt_IntroFragment.java:58)
    at com.social.login.intro.Hilt_IntroFragment.onAttach(Hilt_IntroFragment.java:50)
    at androidx.fragment.app.Fragment.onAttach(Fragment.java:1602)
    at com.social.login.intro.Hilt_IntroFragment.onAttach(Hilt_IntroFragment.java:40)

字符串

LOGİN MODULE中我的ViewModel(动态特性)

class IntroViewModel @Inject constructor(): ViewModel() {
// TODO: Implement the ViewModel
}

登录模块中我的片段

@AndroidEntryPoint
class IntroFragment : BaseFragment<FragmentIntroBinding, IntroViewModel>(
R.layout.fragment_intro
) {

companion object {
    fun newInstance() = IntroFragment()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
}

override fun onInitDataBinding() {
    viewBinding.viewModel = viewModel
}
}

UI模块中我的基础片段

abstract  class BaseFragment <B: ViewDataBinding, M: ViewModel>(
@LayoutRes
private val layoutId: Int
): Fragment() {

@Inject
lateinit var viewModel: M
lateinit var viewBinding: B
...

App模块中我的应用类

@HiltAndroidApp
class App : SplitCompatApplication() {
}

我在App模块的主要活动

@AndroidEntryPoint
class MainActivity : AppCompatActivity()


我从App模块调用IntroFragment。然后应用程序崩溃。
项目结构如下所示:


的数据

jm2pwxwz

jm2pwxwz1#

从一个类似问题的答案:
删除.gradle目录(在项目基目录中)使缓存无效并重新启动Android Studio。

js5cn81o

js5cn81o2#

如果您使用的是动态功能模块,请不要忘记删除@AndroidEntryPoint注解。因为注解来自Hilt,并且您使用Dagger 2作为DI。

相关问题