Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
584 views
in Technique[技术] by (71.8m points)

android - 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 ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...