Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Live Data Exception when using observable

When trying to observe live data from the fragment that is returned from the ViewModel I get the following exception before this I got different error elaborated in this post swapping android.arch.lifecycle:common-java8:1.0.0-beta2 for android.arch.lifecycle:compiler:1.0.0-beta2solved that issue but now I am getting the following exception

You can find the entire code here

E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1                                                                                  
Process: com.nrs.nsnik.architecturecomponents, PID: 4114                                                                                    
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/arch/core/executor/AppToolkitTaskExecutor;                                                                                        
at android.arch.persistence.room.InvalidationTracker.addObserver(InvalidationTracker.java:241)                                                                                           
at android.arch.persistence.room.InvalidationTracker.addWeakObserver(InvalidationTracker.java:257)                                                                                        
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:146)                                                                                        
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:134)                                                                                        
at android.arch.lifecycle.ComputableLiveData$2.run(ComputableLiveData.java:87)                                                                                        
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)                                                                                        
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)                                                                                        
at java.lang.Thread.run(Thread.java:761)                                                                                     
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.arch.core.executor.AppToolkitTaskExecutor" on path: DexPathList[[zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/base.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.nrs.nsnik.architecturecomponents-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.nrs.nsnik.architecturecomponents-1/lib/x86, /system/lib, /vendor/lib]]                                                                                        
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)                                                                                        
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)                                                                                        
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)                                                                                        
at android.arch.persistence.room.InvalidationTracker.addObserver(InvalidationTracker.java:241)                                                                                         
at android.arch.persistence.room.InvalidationTracker.addWeakObserver(InvalidationTracker.java:257)                                                                                         
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:146)                                                                                         
at com.nrs.nsnik.architecturecomponents.data.NoteDao_Impl$4.compute(NoteDao_Impl.java:134)                                                                                         
at android.arch.lifecycle.ComputableLiveData$2.run(ComputableLiveData.java:87)                                                                                         
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)                                                                                        
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)                                                                            
at java.lang.Thread.run(Thread.java:761) 

Build.Gradle :

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
    applicationId "com.nrs.nsnik.architecturecomponents"
    minSdkVersion 25
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    resConfigs "en"
    splits {
        abi {
            enable true
            reset()
            include 'x86_64', 'x86', 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips'
            universalApk false
        }
    }
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
        }
    }
}
sourceSets {
    androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

ext.versionCodes = ['armeabi': 3, 'armeabi-v7a': 4, 'arm64-v8a': 5, mips: 6, 'x86': 7, 'x86_64': 8]
import com.android.build.OutputFile

android.applicationVariants.all { variant ->
variant.outputs.each { output ->
    output.versionCodeOverride =

project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) * 1000 + android.defaultConfig.versionCode
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

testImplementation 'junit:junit:4.12'
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

//SUPPORT LIBRARY
implementation 'com.android.support:appcompat-v7:26.1.0'

//RECYCLER VIEW
implementation 'com.android.support:recyclerview-v7:26.1.0'

//ANNOTATION SUPPORT LIBRARY
implementation 'com.android.support:support-annotations:26.1.0'

//DESIGN SUPPORT LIBRARY
implementation 'com.android.support:design:26.1.0'

//CONSTRAINT LAYOUT
implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta3'

//KOTLIN
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

//RX JAVA & ANDROID
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.4'

//RX BINDING
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.0.0'

//TIMBER LOGGER
implementation 'com.jakewharton.timber:timber:4.5.1'

//GUAVA
implementation 'com.google.guava:guava:23.0'

//DAGGER 2
implementation 'com.google.dagger:dagger-android:2.11'
implementation 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

//BUTTER KNIFE
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

//LEAK CANARY
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

//LIFE CYCLE EXTENSIONS
implementation "android.arch.lifecycle:extensions:1.0.0-alpha9-1"

//LIFE CYCLE JAVA 8
//implementation "android.arch.lifecycle:common-java8:1.0.0-beta2"
implementation "android.arch.lifecycle:runtime:1.0.0"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha9-1"

//LIVE DATA BACKGROUND TEST
testImplementation "android.arch.core:core-testing:1.0.0-alpha9-1"

//LIVE DATA WITH REACTIVE STREAMS
implementation "android.arch.lifecycle:reactivestreams:1.0.0-alpha9-1"

//ROOM
implementation "android.arch.persistence.room:runtime:1.0.0-alpha9-1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha9-1"

//ROOM TEST MIGRATION
testImplementation "android.arch.persistence.room:testing:1.0.0-alpha9-1"

//ROOM RxJAVA
implementation "android.arch.persistence.room:rxjava2:1.0.0-alpha9-1"

//PAGING
implementation "android.arch.paging:runtime:1.0.0-alpha3"
}
like image 817
Nikhil Soni Avatar asked Oct 15 '17 06:10

Nikhil Soni


People also ask

Why LiveData Observer is being triggered twice?

Your fragment A views are created again and the observer is getting triggered once with cached livedata value and antoher time because the vendor type was set again in onViewCreated. Since we are using switchmap in viewmodel and the livedata was set again the observer in fragment A was getting triggered twice.

In which method should you observe a LiveData object?

Observe LiveData objects In most cases, an app component's onCreate() method is the right place to begin observing a LiveData object for the following reasons: To ensure the system doesn't make redundant calls from an activity or fragment's onResume() method.


1 Answers

Same problem here. I had to change from 1.0.0-beta-2 to version 1.0.0-alpha9-1 to work.

like image 105
Alexandre Avatar answered Sep 28 '22 05:09

Alexandre