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

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

错误信息是:错误:找不到符号导入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' } 

布局文件是

 <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type=" net.juude.droidviews.databinding.User" /> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.mName}"/> <TextView android:id="@+id/user_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.sex}"/> </LinearLayout> </layout> 

该片段是

 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文件?

Solutions Collecting From Web of "在android数据绑定中找不到符号BR"

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

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

您可以通过将apt 'com.android.databinding:compiler:1.0-rc0到您的gradle文件来解决此问题。

如果有人仍然有这个问题。 我通过使Android Studio中的caching失效来解决这个问题。 我正在使用API​​ Studio 23的Android Studio 2

文件>无效caching/重新启动

我发现问题的原因在我的情况。 我在我的数据对象类的导入语句中find包含:

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

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

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

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

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

我也得到了同样的错误信息,但是我的根本原因与此处共享的不同。

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

对我来说令人烦恼的是,我无法看到与此有关的任何错误消息,或者在所有其他编译器错误中很难发现。 而Android Studio也不会将额外的注释显示为错误。 因此,如果有人遇到同样的错误,请检查一下您是否在避免APT预处理器投入的注释中出现错误。

刚刚重新启动Android Studio,没有使caching失效,为我做了诡计(我使用的是2.2.3版本)。

如果你使用Android Studio2.3版本,你的项目configuration如下:

 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没有在底部显示这个错误。 我不得不评论每个数据绑定错误>重build项目,直到我到达错误。 获得的教训是从下到上扫描每个错误,并注意最近可能发生的任何变化。

将以下导入添加到您的Object类:

 import com.android.databinding.library.baseAdapters.BR;