在android数据绑定中找不到符号BR

我想使用Android数据绑定并根据官方文档进行配置。

错误信息是:错误:找不到符号导入net.juude.droidviews.BR;

顶级build.gradle文件是:

 buildscript { repositories { jcenter() } dependencies { classpath "com.android.tools.build:gradle:1.3.0-beta2" classpath 'me.tatarka:gradle-retrolambda:3.0.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' classpath "com.android.databinding:dataBinder:1.0-rc0" } } allprojects { repositories { jcenter() mavenCentral() } } 

app模块中的build.gradle文件是

 apply plugin: 'com.android.application' apply plugin: 'me.tatarka.retrolambda' apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'com.android.databinding' android { compileSdkVersion 22 buildToolsVersion "22.0.1" lintOptions { abortOnError false } defaultConfig { applicationId "net.juude.droidviews" minSdkVersion 15 targetSdkVersion 22 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } retrolambda { println("JAVA_HOME: " + System.getenv("JAVA_HOME")) println("JAVA7_HOME: " + System.getenv("JAVA7_HOME")) println("JAVA8_HOME: " + System.getenv("JAVA8_HOME")) javaVersion JavaVersion.VERSION_1_7 } } dependencies { compile project(':ptr-lib-debug') compile project(':library') compile 'com.android.support:support-v4:22.1.0' compile 'com.mcxiaoke.volley:library:1.0.+' compile files('libs/droidmocks.jar') compile 'com.android.support:support-annotations:22.1.1' compile 'com.facebook.fresco:fresco:0.5.0' compile 'com.android.support:recyclerview-v7:22.1.1' compile 'io.reactivex:rxandroid:0.24.0' compile 'io.reactivex:rxjava:1.0.6' compile 'com.google.dagger:dagger:2.0' apt 'com.google.dagger:dagger-compiler:2.0' } 

布局文件是

          

片段是

 package net.juude.droidviews.databinding; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import net.juude.droidviews.BR; import net.juude.droidviews.R; /** * Created by juude on 15-6-9. */ public class DataBindingFragment extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewDataBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data_binding, container, false); //dataBinding.setVariable(BR.) User user = new User(); user.setSex("男"); user.setName("Juude"); dataBinding.setVariable(BR.user, user); return dataBinding.getRoot(); } } 

由于我在Android Studio中没有得到语法错误,我可以假设Android Studio可以识别BR类;

但是当我编译项目时,它告诉我error:cannot find symbol class BR

所以我想知道我该怎么做才能生成正确的BR.java文件?

这是android-apt插件引起的问题。 它忽略了数据绑定插件添加的提供的依赖项。

https://bitbucket.org/hvisser/android-apt/issue/38/android-apt-breaks-brand-new-data-binding#comment-18504545

你可以通过添加:apt’com.android.databinding apt 'com.android.databinding:compiler:1.0-rc0到你的gradle文件来解决它。

万一有人还有这个问题。 我通过在Android Studio中使缓存无效来解决这个问题。 我正在使用带有API 23的Android Studio 2

文件>使高速缓存/重新启动无效

在我的案例中,我find了问题的原因。 我发现在我的Data Object类的import语句中包含:

 import static android.databinding.tool.util.GenerationalClassUtil.ExtensionFilter.BR; 

删除后,问题就解决了。 Android Studio以某种方式为我错误地解决了BR类。

Bindable注释在编译期间在BR类文件中生成一个条目。 BR类文件将在模块包中生成。

 @Bindable public String getFirstName() { return this.firstName; } 

我也得到了相同的错误消息,但我的根本原因与此处分享的不同。

在我的情况下,问题是在我解决了合并冲突后,我错误地在方法上留下了额外的@Override注释。 因此,JVM预处理器失败,然后也没有生成数据绑定类。

令我恼火的部分是我无法看到与此相关的任何错误消息,或者很难发现所有其他编译器错误。 并且Android Studio也不会将额外注释显示为错误。 因此,如果其他人遇到同样的错误,请检查一些注释中是否存在错误,导致APT预处理器无法启动。

我也遇到过这个问题。 问题是我更改了类名,并没有更新XML文件中的值。 这包括variables名称以及在xml文件中访问它们的位置。

只是重新启动Android Studio,而不会使缓存失效,为我做了伎俩(我使用的是2.2.3版本)。

如果您使用Android Studio2.3版本,您的项目配置如下:

 Gradle version: 3.3 Android plubin version:2.3.0 Compile sdk Version:23+ build tools Version:25+ 

你只需要添加

 dataBinding{enabled=true} 

build.gradle,而不是同步gradle文件

对于我的情况,问题是由

“错误:variablesMyVariable已在类MyModel中定义”

令人讨厌的是Android Studio gradle build在底部没有显示此错误。 我不得不评论每个数据绑定错误>重建项目,直到我遇到错误。 获得的经验教训是从下到上扫描每个错误,并注意最近可能发生的任何变化。

对我来说,它有助于在项目文件夹中运行./gradlew clean build 。 它显示了android studio没有的错误。

您需要将其添加到gradle.properties文件中

 android.databinding.enableV2=true 

来自developer.android.com

您可能会收到多个错误报告未find绑定类。 新的数据绑定编译器通过在托管编译器构建应用程序之前生成绑定类来防止这些错误。