Edijae Crusar
Edijae Crusar

Reputation: 3541

LiveData_LifecycleBoundObserver_LifecycleAdapter cannot be cast to GeneratedAdapter

I am using kotlin in my android studio project and I'm trying to add an observer to a MutableLiveData which contains an ArrayList but I'm getting the exception below.

java.lang.ClassCastException: android.arch.lifecycle.LiveData_LifecycleBoundObserver_LifecycleAdapter cannot be cast to android.arch.lifecycle.GeneratedAdapt
    at android.arch.lifecycle.Lifecycling.createGeneratedAdapter(Lifecycling.java:79)
    at android.arch.lifecycle.Lifecycling.getCallback(Lifecycling.java:62)
    at android.arch.lifecycle.LifecycleRegistry$ObserverWithState.<init>(LifecycleRegistry.java:346)
    at android.arch.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:162)
    at android.arch.lifecycle.LiveData.observe(LiveData.java:199)

project level build.gradle

buildscript {
    ext.kotlin_version = '1.2.10'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0-alpha05'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

app's build.gradle

android {      
    dataBinding {
        enabled true;
    }
}
dependencies {
    implementation "android.arch.lifecycle:runtime:1.0.3"
    implementation "android.arch.lifecycle:extensions:1.0.0-alpha9-1"
    kapt "android.arch.lifecycle:compiler:1.0.0-alpha9-1"
//...
}

my activity

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    //...
    val liveData = MutableLiveData<ArrayList<Media>>()
    //...
    liveData.observe(this, object : Observer<ArrayList<Media>>{
            override fun onChanged(t: ArrayList<Media>?) {
                if(t?.size!! > 0){
                    binding.totalTv.text =t.size.toString()
                    binding.totalTv.visibility = View.VISIBLE
                }
            }
    })
    //...
}

How can I solve the error?

Upvotes: 3

Views: 2149

Answers (2)

Edijae Crusar
Edijae Crusar

Reputation: 3541

I changed android.arch.lifecycle:extensions

From

 implementation "android.arch.lifecycle:extensions:1.0.0-alpha9-1"

To

implementation "android.arch.lifecycle:extensions:1.0.0"

then synced my project and it was successful. Thanks to @MatPag for insight

Upvotes: 2

MatPag
MatPag

Reputation: 44861

I've tested your piece of code with:

  • dataBinding { enabled true }
  • sourceCompatibility and targetCompatibility to Java 8
  • gradle 4.2.1
  • android plugin 3.0.1
  • kotlin plugin 1.2.10

Dependencies:

  • appcompat-v7 27.0.2
  • android.arch.lifecycle:runtime:1.0.3
  • android.arch.lifecycle:extensions:1.0.0
  • android.arch.lifecycle:compiler:1.0.0

And everything is working fine...

Upvotes: 1

Related Questions