# java.lang.RuntimeException: 无法创建类 com.example.MyViewModel 的实例。位于 androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221) ... 原因：java.lang.InstantiationException: java.lang.Class<com.example.MyViewModel> 没有零参数构造函数

- **ID:** `android/viewmodel-factory-required`
- **领域:** android
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 88%

## 根因

使用了 ViewModelProvider.NewInstanceFactory，但 ViewModel 类具有参数化构造函数，需要自定义 ViewModelProvider.Factory 或 Hilt/AndroidViewModel。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Lifecycle 2.5 - 2.7 | active | — | — |
| AndroidX Activity 1.7 - 1.8 | active | — | — |

## 解决方案

1. ```
   Create a custom ViewModelProvider.Factory: 'class MyViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { return MyViewModel(repository) as T } }' and pass it to viewModels(): 'val viewModel: MyViewModel by viewModels { MyViewModelFactory(repository) }'
   ```
2. ```
   Use AndroidViewModel if the ViewModel needs Application context: 'class MyViewModel(application: Application) : AndroidViewModel(application)' and use by viewModels() without factory.
   ```

## 无效尝试

- **** — The ViewModel may have null fields, causing NullPointerExceptions when accessed; it's a workaround but not a proper fix. (50% 失败率)
- **** — The delegate uses NewInstanceFactory by default, which requires a no-arg constructor. (50% 失败率)
