给定的组件持有者 MainActivity 未实现接口 generatedComponent 或接口 generatedComponentManager

问题描述 投票:0回答:1

由于某种原因,我正在与 hiltViewModel 作斗争。我发了很多类似的帖子,但没有成功,我慢慢地感到沮丧,也许你会发现我监督过的东西。

当我想使用刀柄注入 ViewModel 但我不明白为什么时,麻烦就开始了......

这是我的部门:

  plugins {
      id("kotlin-kapt")
      id("com.google.dagger.hilt.android") version "2.47" apply false
  }  

  buildscript {
      dependencies {
          classpath("com.google.dagger:hilt-android-gradle-plugin:2.48")
      }
  }

  dependencies{
    //Dagger Hilt - dependency injection
    implementation("com.google.dagger:hilt-android:2.48")
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0-alpha01")

    kapt("com.google.dagger:hilt-compiler:2.48")
    kapt("com.google.dagger:hilt-android-compiler:2.48")

    runtimeOnly("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03")

    //general
    ...
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
  }

然后我创建应用程序:

@HiltAndroidApp
class MyApp : Application() {
}

并在AndroidManifest中实现

...
<application
        android:name=".MyApp"
...

这是主要活动:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val navController = rememberNavController();

            MyAppTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    NavHost(navController = navController, startDestination = "home") {
                        composable("home") {
                            MyView()
                        }
                    }
                }
            }
        }
    }
}

这就是视图模型:

@HiltViewModel
class MyViewModel @Inject constructor(
) : ViewModel() {
   ...
}

这就是它崩溃的地方:

@Composable
fun MyView(
   viewModel: MyViewModel = hiltViewModel()
) {
   ...
}

我得到的错误是:

java.lang.IllegalStateException: Given component holder class com.example.MainActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager

我不明白为什么。有什么想法吗?

提前谢谢您!

@更新 我发现这有效:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val navController = rememberNavController();

            MyAppTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    IncomeView()
                }
            }
        }
    }
}

那么为什么这会引发这个错误:

NavHost(navController = navController, startDestination = "home") {
  composable("home") {
    MyView()
  }
}

没有 NavHost 不行吗?

android kotlin android-jetpack-compose dagger dagger-hilt
1个回答
0
投票

我也遇到过类似的问题。我忘记在清单中声明应用程序名称,现在它工作正常。

 <application
    android:name=".HiltApplication"
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.