首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:[Dagger/MissingBinding] java.util.ArrayList<java.lang.Integer>不能在没有@Inject构造函数或@Provides注释的方法下提供

错误:[Dagger/MissingBinding] java.util.ArrayList<java.lang.Integer>不能在没有@Inject构造函数或@Provides注释的方法下提供
EN

Stack Overflow用户
提问于 2021-04-07 17:22:13
回答 1查看 390关注 0票数 1

错误:

代码语言:javascript
运行
复制
error: [Dagger/MissingBinding] java.util.ArrayList<java.lang.Integer> cannot be provided without an @Inject constructor or an @Provides-annotated method.
  public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_LifecycleComponentBuilderEntryPoint,

   javax.inject.Provider<java.util.ArrayList<java.lang.Integer>> is injected at
          space.rodionov.swedishdriller.DrillerViewModel_AssistedFactory(�, drillerCatList, �)
      space.rodionov.swedishdriller.DrillerViewModel_AssistedFactory is injected at
          space.rodionov.swedishdriller.DrillerViewModel_HiltModule.bind(factory)
      java.util.Map<java.lang.String,javax.inject.Provider<androidx.hilt.lifecycle.ViewModelAssistedFactory<? extends androidx.lifecycle.ViewModel>>> is injected at
          androidx.hilt.lifecycle.ViewModelFactoryModules.ActivityModule.provideFactory(�, viewModelFactories)
      @dagger.hilt.android.internal.lifecycle.DefaultActivityViewModelFactory java.util.Set<androidx.lifecycle.ViewModelProvider.Factory> is requested at
          dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.ActivityEntryPoint.getActivityViewModelFactory() [space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.SingletonC ? space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.ActivityRetainedC ? space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.ActivityC]
  The following other entry points also depend on it:
      dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories.FragmentEntryPoint.getFragmentViewModelFactory() [space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.SingletonC ? space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.ActivityRetainedC ? space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.ActivityC ? space.rodionov.swedishdriller.SwedishDrillerApplication_HiltComponents.FragmentC][WARN] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: androidx.room.RoomProcessor (DYNAMIC).

此错误发生在生成项目时试图启动它。这是在我完成ViewModel代码并从片段中调用其方法之后发生的。在我看来,我在ViewModel上犯了错误,但希尔特对我来说也是新的语言。感谢恩赐的帮助。代码:

零碎:

代码语言:javascript
运行
复制
@AndroidEntryPoint
class DrillerFragment : Fragment(R.layout.cardstack_layout), CardStackListener {

    private val viewModel: DrillerViewModel by viewModels()

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

        val binding = CardstackLayoutBinding.bind(view)
        val drillerLayoutManager = CardStackLayoutManager(requireContext(), this) // ЧТО ПИСАТЬ В CONTEXT??
        val drillerAdapter = DrillerAdapter()
        binding.apply {
            cardStackView.apply {
                adapter = drillerAdapter
                layoutManager = drillerLayoutManager
                itemAnimator = null 
            }
        }

        viewModel.getLivedataList().observe(viewLifecycleOwner) {
            drillerAdapter.submitList(it)
        }
        viewModel.get4words()
    }

在ViewModel中:

代码语言:javascript
运行
复制
class DrillerViewModel @ViewModelInject constructor(
    private val wordDao: WordDao,
    val drillerCatList: ArrayList<Int> = ArrayList(),
    val mLivedataList: MutableLiveData<List<Word>>
) : ViewModel() {

    val shownCategoriesFlow = wordDao.getShownCategoriesNumbers()

    fun getLivedataList(): LiveData<List<Word>> {
        return mLivedataList
    }

    fun get4words() = viewModelScope.launch {
        shownCategoriesFlow.collect {
            it.forEach { catNumber ->
                drillerCatList.add(catNumber)
            }
        }
        wordDao.get4words(drillerCatList).collect {
            mLivedataList.value = it
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 17:31:11

在构造函数中设置变量

代码语言:javascript
运行
复制
    val drillerCatList: ArrayList<Int> = ArrayList(),
    val mLivedataList: MutableLiveData<List<Word>>

作为类中的普通变量,如果不通过Hilt注入它们

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66991059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档