我正在使用Hilt。更新到1.0.0-alpha03
后,我收到警告说@ViewModelInject
已过时,应该使用@HiltViewModel
。但是当我更改时,我遇到了错误:
java.lang.RuntimeException: Cannot create an instance of class com.example.LoginViewModel
...
Caused by: java.lang.NoSuchMethodException: com.example.LoginViewModel.<init> [class android.app.Application]
我之前的ViewModel长这样:
class LoginViewModel @ViewModelInject constructor(
application: Application,
private val repository: RealtimeDatabaseRepository
) : AndroidViewModel(application)
现在它看起来是这样的:@HiltViewModel
class LoginViewModel @Inject constructor(
application: Application,
private val repository: RealtimeDatabaseRepository
) : AndroidViewModel(application)
ViewModel被注入的Fragment:
@AndroidEntryPoint
class LoginFragment : Fragment(R.layout.fragment_login)
{
private val viewModel: LoginViewModel by activityViewModels()
}
注入的类:
@Singleton
class RealtimeDatabaseRepository @Inject constructor() { }
当我从ViewModel的构造函数中删除private val repository: RealtimeDatabaseRepository
时,它可以正常工作。
我正在使用Hilt版本2.30.1-alpha
,当我更新到2.31.2-alpha
时,就像USMAN osman建议的那样,错误消失了。
@AndroidEntryPoint
吗?此外,对于已经使用了@Inject
构造函数注释的类,你不需要一个@Provides
方法。 - IR42@AndroidEntryPoint
。但如果我想让我的存储库成为单例,我不必使用@Provides
吗?我可以用@Singleton
注释一个类,这就足够了吗? - iknow@Singleton class RealtimeDatabaseRepository @Inject constructor() { }
。 - IR42