小编Tar*_*nga的帖子

用 Hilt 注入上下文:这个字段会泄露一个上下文对象

我正在使用 Hilt 将上下文和其他依赖项注入到我的 HomeViewModel 类中;一切正常,但我收到此警告。我怎样才能防止泄漏?

这是我的 HomeFragment(我在其中注入并使用 HomeViewModel 类):

@AndroidEntryPoint
class HomeFragment : Fragment() {

private val viewModel: HomeViewModel by viewModels()

....

}
Run Code Online (Sandbox Code Playgroud)

这是警告:

刀柄注入视图模型

class HomeViewModel @ViewModelInject constructor(
    @ApplicationContext val context: Context,
    private val locationAPI: LocationAPI,
    private val imagesAPI: ImagesAPI
) :
    ViewModel() {
...
}
Run Code Online (Sandbox Code Playgroud)

我正在使用:

//Hilt DI
implementation "com.google.dagger:hilt-android:2.30.1-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.30.1-alpha"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02"
kapt "androidx.hilt:hilt-compiler:1.0.0-alpha02"
Run Code Online (Sandbox Code Playgroud)

谢谢!

- 根据建议,在第一个给出的答案之后进行编辑:

家庭片段现在是:

在此处输入图片说明

@HiltViewModel
class DetailsViewModel @Inject constructor(
    @ApplicationContext val context: Context,
    private val locationDetailsAPI: LocationAPI) :
    ViewModel() {
...

}
Run Code Online (Sandbox Code Playgroud)

依赖更新为: …

android kotlin dagger-hilt

13
推荐指数
4
解决办法
3189
查看次数

如何使用 Hilt 在 ViewModel 中注入应用程序:上下文?

您好,我正在尝试使用 Hilt 注入视图模型,但出现以下错误:

 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.wordssample, PID: 25250
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wordssample/com.example.wordssample.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
  
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
    at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:74)
    at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
Run Code Online (Sandbox Code Playgroud)

这是我的主要活动:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
   
    private val viewModel  by viewModels<MainViewModel>()


    override fun onCreate(savedInstanceState: Bundle?) {
      ....
Run Code Online (Sandbox Code Playgroud)

这是我试图注入的 ViewModel 类

class MainViewModel @ViewModelInject constructor(
    @ApplicationContext application: Context,
    @Assisted …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger-hilt

8
推荐指数
2
解决办法
4469
查看次数

LifecycleService 和 Service 类有什么区别?

我一直在阅读 Android 开发人员页面上的文档,但除了一个从 Service 扩展并实现 LifecycleOwner 和另一个扩展 ContextWrapper 的事实之外,我一直无法理解何时使用其中一个。同样的目的?

android kotlin

3
推荐指数
1
解决办法
1099
查看次数

安卓模拟器可以显示触摸反馈吗?

我正在从模拟器录制屏幕,我希望视频显示我点击的位置。如何获得模拟器的触摸反馈?

android android-emulator

3
推荐指数
1
解决办法
1632
查看次数

标签 统计

android ×4

kotlin ×3

dagger-hilt ×2

android-emulator ×1