Android Studio Chipmunk 2021.2.1; \nCompose Version = \'1.1.1\'; \nGradle Version 7.4.2; \nKotlin 1.6.10;\nRun Code Online (Sandbox Code Playgroud)\n直到某一时刻,一切都正常。然后,当我尝试在此项目和另一个项目中调用“LocalContext.current”并将“context.applicationContext 作为应用程序”时,出现此错误并且预览停止工作。它曾经与“LocalContext.current”一起使用的地方
\n尝试过不同版本的 Compose、kotlin、gradle。
\n\n\n\njava.lang.ClassCastException: 类\ncom.android.layoutlib.bridge.android.BridgeContext 无法转换为\n类 android.app.Application\n(com.android.layoutlib.bridge.android.BridgeContext 和\nandroid.app.应用程序位于 loader\ncom.intellij.ide.plugins.cl.PluginClassLoader @3a848149) \xc2\xa0\xc2\xa0at\ncom.client.personalfinance.screens.ComposableSingletons$AccountScreenKt$lambda-2$1.invoke( AccountScreen.kt:136)\n\xc2\xa0\xc2\xa0at\ncom.client.personalfinance.screens.ComposableSingletons$AccountScreenKt$lambda-2$1.invoke(AccountScreen.kt:133)\n\xc2\xa0\xc2 \xa0at\nandroidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm. kt:34)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.material.MaterialTheme_androidKt.PlatformMaterialTheme(MaterialTheme.android.kt:23)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.material。 MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:82)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.material.MaterialThemeKt$MaterialTheme$1$1.invoke(MaterialTheme.kt:81)\n\xc2\ xa0\xc2\xa0at\nandroidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda .jvm.kt:34)\n\xc2\xa0\xc2\xa0at\nandroidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)\n\xc2\xa0\xc2\xa0at androidx.compose.material。 TextKt.ProvideTextStyle(Text.kt:265
\n
@Preview(showBackground = true) \n@Composable fun PrevAccountScreen() {\n val context = LocalContext.current\n val mViewModel: MainViewModel =\n viewModel(factory = MainVeiwModelFactory(context.applicationContext as Application))\n AccountScreen(navController = rememberNavController(), viewModel = mViewModel)\n }\nRun Code Online (Sandbox Code Playgroud)\n kotlin android-studio android-jetpack-compose android-jetpack-compose-preview
我试图确保我的数据库始终包含初始行。我通读了如何在首次运行时填充 Android Room 数据库表?我遇到的主要问题是,在创建数据库时,我没有可以使用 Hilt 访问的实例(或者我不知道如何访问它?)。如果我尝试重新使用provideDatabase我编写的 Hilt 方法,则会导致 SQLite 数据库泄漏(大概是因为周围没有人使用这些生成的实例来关闭数据库)。这是我的代码:
@Module
@InstallIn(ApplicationComponent::class)
object AppModule {
@Singleton
@Provides
fun provideDatabase(@ApplicationContext context: Context): GameDatabase {
return Room.databaseBuilder(context, GameDatabase::class.java, GameDatabase.GAME_DB_NAME)
.addCallback(
object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
// Initialize the database with the first game
ioThread {
provideDatabase(context).gameDao().createNewGame(Game())
}
}
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
// Ensure there is always one game in the database
// This will capture the case of the app …Run Code Online (Sandbox Code Playgroud)