Android.app.Application не может быть приведен к LifecycleOwner

К сожалению, я не могу использовать getApplication() в качестве LifecycleOwner, потому что android.app.Application, похоже, не реализует его.

Почему android.app.Application не реализует LifecycleOwner?

Код, в котором я пытаюсь использовать getApplication() в качестве LifecycleOwner для LiveData:

result.observe(getApplication(), ....);

Грейдл:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "XXXX"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }

}

dependencies {
    // GENERAL
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.1.0-alpha07'
    implementation "androidx.room:room-runtime:2.1.0"
    annotationProcessor "androidx.room:room-compiler:2.1.0"
    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.0.0"
    implementation "androidx.navigation:navigation-fragment:2.1.0-alpha05"
    implementation "androidx.navigation:navigation-ui:2.1.0-alpha05"

    // Third party libraries

    // Jetbrains
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.31'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'

    // Glide
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

    // Fotoapparat
    implementation 'io.fotoapparat:fotoapparat:2.7.0'

    // TEST
    testImplementation 'junit:junit:4.12'

    // ANDROID TEST
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    androidTestImplementation "androidx.room:room-testing:2.1.0"
}

Ошибка:

java.lang.ClassCastException: ...
android.app.Application cannot be cast to androidx.lifecycle.LifecycleOwner

Поделитесь своим файлом Gradle

Deˣ 20.06.2019 17:07

Я добавил файл gradle

Lukas Schneider 20.06.2019 17:12

Посмотрите на этот вопрос, он с кодом. Работает stackoverflow.com/q/56780722/2425851

NickUnuchek 29.07.2021 10:16
5
3
5 654
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Why does android.app.Application not implement LifecycleOwner?

У него нет жизненного цикла. Он создается, затем существует на протяжении всего существования процесса.

Code where I try to use getApplication() as LifecycleOwner for LiveData:

Либо используйте что-то с реальным жизненным циклом (активность, фрагмент и т. д.), либо используйте observeForever().

О, ты прав, спасибо. Хотя странно, что я не получил никаких ошибок компиляции при регистрации getApplication() как LifecycleOwner.

Lukas Schneider 20.06.2019 17:17

@LukasSchneider: Этот является странный. У вас там был какой-то ручной слепок?

CommonsWare 20.06.2019 17:55

Нет, я этого не делал. Я полагаю, это потому, что getApplication() из AndroidViewModel (где я написал код) возвращает <T extends Application> T

Lukas Schneider 20.06.2019 18:06

Вы не можете применить the Application класс к LifecycleOwner. Также я бы попросил вас обновить вашу зависимость. Были некоторые проблемы, связанные с LifecyclerOwner в более ранних выпусках.

Попробуйте обновить свой

 implementation 'androidx.appcompat:appcompat:1.0.2'

на что-то вроде:

 implementation 'androidx.appcompat:appcompat:1.1.0-beta01'   

Если вы действительно хотите наблюдать LiveData за жизненным циклом Application, вы можете использовать ProcessLifecycleOwner

Другие вопросы по теме