尽管我在onCreate()过程中初始化了它的值,但是当viewModelProvider访问它时,我收到了一个错误,即我最近的初始化变量CONTAINER还没有被初始化.任何帮助都将不胜感激.

Container Initialisation code

import android.app.Application
import com.example.flashcardapp.data.AppContainer
import com.example.flashcardapp.data.AppDataContainer

class FlashcardApplication: Application() {
    lateinit var container: AppContainer
    override fun onCreate() {
        super.onCreate()
        container = AppDataContainer(this)
    }
}

我还将此应用程序类添加到我的 list 中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:name=".FlashcardApplication"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.FlashcardApp"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.FlashcardApp">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

出厂初始化代码

import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.CreationExtras
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import com.example.flashcardapp.FlashcardApplication

object AppViewModelProvider {
    val Factory = viewModelFactory {
        initializer {
            FlashcardViewModel(FlashcardApplication().container.flashCardsRepository)
        }
    }
}

推荐答案

我认为这是因为您的代码的这一部分:

FlashcardApplication()

您正在创建应用程序的新实例,而不是调用onCreate的实例.您需要获取现有应用程序的实例,而不是创建新的实例.

有关方式的详细信息,请参阅此答案:Correct way to get the instance of Application in android

例如:

(activity.application as FlashcardApplication)

Android相关问答推荐

Android库中的kotlinCompilerExtensionVersion

在一列中垂直对齐两个框

Android 14预测性背部手势-闪烁的白色背景色

学习Kotlin问题.无法理解Modifier参数

retrofit2.HttpException: HTTP 401

使用 settings.gradle 文件将 Firebase 依赖项添加到 Android 项目

在 AGP 8.0 中构建失败,无法应用插件realm-android. APIandroid.registerTransform已删除

发布 MAUI 应用程序时出现遇到重复程序集错误

AttributionSource 需要 android.permission.BLUETOOTH_SCAN 权限的问题

如何像 XML 一样在 Compose Android Studio 中折叠/展开小部件代码区域/区域

为什么项目捕获对象给我在 Compose 中找不到参考

MediumTopAppBar Material3 只更改大标题

Hilt 依赖注入重复绑定错误

重命名列失败的房间自动迁移(NOT NULL 约束失败,生成错误的迁移类)

TextField 溢出和软包装不适用于 Compose 约束布局

Jetpack 组合和片段

如何在 Android Studio 中使用 Github Copilot?

Android Studio (Kotlin):无法启动活动

在 Android 10 (API 29) 中隐藏状态栏并在应用程序中使用其空间

如何获取 Android Preferences DataStore 的所有键