Сбой приложения Android при реализации HiltViewModelAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сбой приложения Android при реализации HiltViewModel

Сообщение Anonymous »

Изменить: добавлено больше кода и сообщений об ошибках.
У меня есть следующая реализация HiltViewModel с базой данных ниже:
@Module
@InstallIn(SingletonComponent::class)
object AppDatabaseModule {
@Provides
@Singleton
fun providesAppDatabase(
@ApplicationContext applicationContext: Context,
): AppDatabase = Room.databaseBuilder(
context = applicationContext,
klass = AppDatabase::class.java,
name = "database",
).build()

@Provides
fun providesDataDao(db: AppDatabase): DataDao = db.dataDao()
}

@HiltViewModel
class DataModel @Inject constructor (
dataDao: DataDao,
) : ViewModel() {
val data: StateFlow = dataDao.getAll()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5),
initialValue = emptyList(),
)
}

@Database(entities = [Data::class], version = 1)
abstract class AppDatabase: RoomDatabase() {
abstract fun dataDao(): DataDao
}

@Entity (tableName = "data")
data class Data(
@PrimaryKey(autoGenerate = true)

val uid: Int = 0,
val str: String
)

@Dao
interface DataDao {
@Query("SELECT * FROM data")
fun getAll(): Flow
}

Когда я включаю dataModel: DataModel = hiltViewModel() в представление @Composable, приложение аварийно завершает работу. Как это решить?
Ниже приведены сообщения об ошибках:
FATAL EXCEPTION: main Process: com.example.app, PID: 3540 java.lang.IllegalStateException: Given component holder class com.example.app.MainActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager
at dagger.hilt.EntryPoints.get(EntryPoints.java:62)
at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.createInternal(HiltViewModelFactory.java:206)
at androidx.hilt.navigation.HiltViewModelFactory.create(HiltNavBackStackEntry.kt:75) a t a n d r o i d x . h i l t . n a v i g a t i o n . c o m p o s e . H i l t V i e w M o d e l K t . c r e a t e H i l t V i e w M o d e l F a c t o r y ( H i l t V i e w M o d e l . k t : 9 5 ) < b r / > a t c o m . e x a m p l e . a p p . V i e w K t . V i e w ( V i e w . k t : 1 1 6 ) < b r / > a t c o m . e x a m p l e . a p p . N a v i g a t i o n B a r K t $ A p p N a v H o s t $ 1 $ 1 $ 1 $ 1 . i n v o k e ( N a v i g a t i o n B a r . k t : 8 9 ) < b r / > a t c o m . e x a m p l e . a p p . N a v i g a t i o n B a r K t $ A p p N a v H o s t $ 1 $ 1 $ 1 $ 1 . i n v o k e ( N a v i g a t i o n B a r . k t : 8 7 ) < b r / > a t a n d r o i d x . c o m p o s e . r u n t i m e . i n t e r n a l . C o m p o s a b l e L a m b d a I m p l . i n v o k e ( C o m p o s a b l e L a m b d a . k t : 1 3 0 ) < b r / > a t a n d r o i d x . c o m p o s e . r u n t i m e . i n t e r n a l . C o m p o s a b l e L a m b d a I m p l . i n v o k e ( C o m p o s a b l e L a m b d a . k t : 5 1 ) < b r / > a t a n d r o i d x . n a v i g a t i o n . c o m p o s e . N a v H o s t K t $ NavHost$4$2.invoke(NavHost.kt:163)
at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:162)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:384)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:79)
at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:60)
at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:364)
at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:162)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:141)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:130)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:130)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:125)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:121)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:51)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:136)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:71)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:141)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:13)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:10)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:235)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2838)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:3158)
at androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(Composer.kt:3706)
at androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime_release(Composer.kt:3648)
2025-10-13 16:10:51.621 3540-3540 AndroidRuntime com.example.app E at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:1002)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1266)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:142)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:620)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:591)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:39)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:108)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1568)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1579)
at android.view.Choreographer.doCallbacks(Choreographer.java:1179)
at android.view.Choreographer.doFrame(Choreographer.java:1104)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1553)
at android.os.Handler.handleCallback(Handler.java:995)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loopOnce(Looper.java:248)
at android.os.Looper.loop(Looper.java:338)
at android.app.ActivityThread.main(ActivityThread.java:9067)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@d8ff5b0, androidx.compose.ui.platform.MotionDurationScaleImpl@9476c29, StandaloneCoroutine{Cancelling}@713bbae, AndroidUiDispatcher@d2a1d4f]
2025-10-13 16:10:51.632 3540-3540 Process com.example.app I Sending signal. PID: 3540 SIG: 9
2025-10-13 16:10:51.642 626-722 InputDispatcher pid-626 E channel '77b4433 com.example.app/com.example.app.MainActivity' ~ Channel is unrecoverably broken and will be disposed!


Подробнее здесь: https://stackoverflow.com/questions/797 ... tviewmodel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»