androidandroid-databindingandroid-room2-way-object-databindingannotation-processor

Room annotation processor with Data binding


I have used Data binding in my existing code and now I am migrating to Room for persistence. I have followed the steps mentioned in Florina's Blog for room

My Code builds fine without java code error or BR related error when I remove room dependency

 annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'

and its runs too, but gives Runtime exception saying database_Impl does not exists. As it couldn't generate that's file.

But after I put Annotation processor back, it give me

 Error:(29, 37) error: cannot find symbol class BR

My gradle plugin used is com.android.tools.build:gradle:3.0.1

They both don't seem to work together

Steps taken so far:

  1. Changed BaseObservable to Observable As suggested here
  2. Updated Android Studio to 3.0.1
  3. Tried using gradle latest plugin canary 6
  4. Clear, Clear Cache also done

Has anyone used Room and Data binding together ?


Solution

  • After 4 days of efforts I finally made my code run properly. Steps to solve the

    Data binding error like error: package com.packagename.databinding does not exist error: cannot find symbol class CustomMainActivityBinding

    The app gradle must have below code added in order to view more than 100 errors that come by default

    allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "4000"
            options.compilerArgs << "-Xmaxwarns" << "4000"
        }
      }
    }
    

    Gradle dependencies for data binding and Room arch components

    annotationProcessor 'com.android.databinding:compiler:3.0.1'
    
    implementation 'android.arch.lifecycle:extensions:1.0.0'
    implementation 'android.arch.persistence.room:runtime:1.0.0'
    annotationProcessor 'android.arch.lifecycle:compiler:1.0.0'
    annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
    

    Note: Gradle plugin version is 3.0.1

    I changed my all VMs to implement Observable and call

    registry.notifyChange(this, BR.bar);
    

    in case of notify change and also implement overridden methods

    @Override
    public void addOnPropertyChangedCallback(OnPropertyChangedCallback    
    callback) {
    registry.add(callback);
    }
    
    @Override
    public void removeOnPropertyChangedCallback(
    OnPropertyChangedCallback callback) {
    registry.remove(callback);
    }
    

    These things made my code Build, but it run without exceptions when I solved the Room query related errors. Which was the main reason, code was building but not running. These errors I could see when I Rebuid my project again.

    UPDATE:

    After Android studio 3.1.3, Message window is gone and now all build error appears under Build view. Although there is toggle available to get textview response of error, for data-binding errors it isn't sufficient.

    Solution that helped me:

    1. In Command promt/Terminal navigate to project root.
    2. Run this command "./gradlew build --stacktrace" if Mac or ".\gradlew build --stacktrace" if Windows.
    3. Now search for "error:" tag and the compile time errors will show up.

    I couldn't get these errors in IDE.