Android Hilt使用报错:ViewModel无无参构造函数
Hilt注入ViewModel报错:"ViewModel has no zero argument constructor" 解决方案
问题核心
你遇到的错误本质是:Composable中使用了默认的viewModel()函数获取Hilt注解的ViewModel,该函数无法识别Hilt的依赖注入逻辑,会尝试用无参构造函数实例化ViewModel,导致报错。
解决步骤
1. 替换ViewModel获取方式
将Composable中获取ViewModel的代码,从默认的viewModel()替换为Hilt提供的hiltViewModel()函数,该函数会使用Hilt的ViewModel工厂来创建实例。
修改你的RecipeBookApp Composable:
@Composable fun RecipeBookApp( navController: NavHostController = rememberNavController() ) { Log.d("GetRecipe", "Still in Recipe Screen About to make the call") // 替换为Hilt的hiltViewModel() val recipeViewModel: RecipeViewModel = hiltViewModel() var editMode by remember { mutableStateOf(false) } // ... 其余代码保持不变 }
2. 确保引入Hilt-Compose导航依赖
检查你的模块级build.gradle(或build.gradle.kts)是否添加了Hilt与Compose导航集成的依赖:
// 替换为对应稳定版本,如1.1.0 implementation "androidx.hilt:hilt-navigation-compose:1.1.0"
3. 验证导入包
确保hiltViewModel()的导入是正确的:
import androidx.hilt.navigation.compose.hiltViewModel
额外检查点
- 确认
RecipeViewModel已添加@HiltViewModel注解,且构造函数用@Inject标注 - 主Activity的
@AndroidEntryPoint、Application类的@HiltAndroidApp注解无误 - 清理项目并重新构建(
Build > Clean Project然后Build > Rebuild Project),避免缓存导致的问题
内容的提问来源于stack exchange,提问作者bunkkin
相关产品推荐
相关产品推荐

