数据绑定:找不到符号 class BR
Data Binding: Cannot find symbol class BR
我尝试在我现有的项目中使用数据绑定,但我无法构建它。
在项目 build.gradle
中使用:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
//Data Binding Beta
classpath "com.android.databinding:dataBinder:1.0-rc4"
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
正在申请
apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'`
在模块中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
apt 'com.android.databinding:compiler:1.0-rc1+'
}
我尝试将数据绑定与 RecyclerView/Fragment/ViewHolder/Adapter..
我使用 Android Studio 1.4.1。
使用 compileSdkVersion 23 和 buildToolsVersion“23.0.1”。
我在没有 apt 的情况下尝试过,不同的 gradle 版本,证明阅读了我的 classes/xml..
我还使用 Butterknife(因为我的项目太大,无法一次更改所有内容)和其他(但不相关的)库。
我同步并重建了我的项目,我 closed/opened Android Studio,我试图使缓存无效。我从一开始就构建了一个 'fresh' 示例,效果很好。
我的 getter 我的 "data class" 方法是@Bindable。
此外,未创建数据绑定包。 (错误消息说它不存在)和 Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21
我遇到过与您类似的 DataBinding 问题,例如 Android Studio 无法找到生成的绑定 class,例如 "MainActivityBinding"。重新启动 Android Studio 帮我解决了这个问题。
至于 BR classes,我遇到过找不到它们的问题,但通常是因为我在布局中犯了一个错误-class。例如绑定到一个不存在的字段。确保其他一切正确,然后重新启动 Android Studio。
我几乎每次尝试对自定义对象使用 ObservableList
时都会遇到 Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21
错误。但我发现,几乎每次我在输入后都忘记了 >
。傻我。
所以,我的解决方案是检查它:
<data>
<import type="android.databinding.ObservableArrayList"/>
<variable
name="dices"
type="ObservableArrayList<Dice>" /> //don't forget the '>' after Dice
</data>
更新后 Android Studio 到版本 2.3 和 Gradle 3.3 我遇到了这个错误,我的解决方案是将其添加到我的 build.gradle(app) 文件
apt 'com.android.databinding:compiler:2.3.0'
我长期使用数据绑定,我想出了一些要点,对你也有帮助。
此答案将帮助您在 ViewDataBinding
class.[=71 中生成 ViewDataBinding
、BindingResource(BR)
class 和布局变量=]
6个避免卡在绑定中的技巧。
(1) 您应该在 build.gradle
中 启用数据绑定 。如果没有,则添加此和 Sync.
android {
...
dataBinding {
enabled = true
}
...
}
(2) 现在如果你想生成数据绑定 class 那么你应该 用数据绑定包裹 xml layout
(<layout
标签)。像这样。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
(3) 现在应该生成数据绑定 class。
If your layout name is in snake case activity_main.xml
then data binding class
will be generated in camel case like ActivityMainBinding
.
有时当您键入 ActivityMai...
时,它 不会显示建议 ,但 会不是说 class 是 未生成 。在这种情况下,您应该 键入预期生成的 class 的全名 。就像键入 ActivityMainBinding
一样,它 将显示导入弹出窗口 。 (这就是我多次遇到的问题。)
(4) 如果仍然没有生成你的class。 (有时当我们粘贴布局文件时,它就会发生)。然后 从 Build> Rebuild
重建项目(不是构建或制作项目)。它将生成您的数据绑定 class。 (Rebuild 总是对我有魔力。)
(5) 如果您在布局中创建了 <variable
而它 没有在数据绑定 class 中显示其 setter 和 getter,然后 按照第 4 个点 .
(6) 如果您的 class 没有生成,那么您应该 检查构建是否因错误而失败 在你的布局文件中。数据绑定 class 将在构建成功时生成。
这就是我为解决数据绑定错误所做的全部工作。如果您有任何进一步的问题,可以在这里发表评论。
有时 DataBinding 会显示不相关的错误,但在我的情况下我忘了添加
应用插件:'kotlin-kapt'
在您的 Gradle 应用程序文件中
错误实际上可能不是由于数据绑定造成的。 Javac 截断错误日志,因此可能不会显示实际问题。
看看这个 link。
https://movieos.org/2017/android-room-data-binding-compile-time-errors/
对于 AndroidX 项目:
我在迁移到androidx后遇到了这个问题,我就是这样解决的。
- BR class 是在您重建项目时从数据绑定自动生成的。
但是如果错误依旧,在下面添加代码
你的导入然后重建项目。
import androidx.databinding.library.baseAdapters.BR;
将您的项目转换为 android x,然后从下面的包中导入 BR class
导入 androidx.databinding.library.baseAdapters.BR
在我的例子中,我已经更新了我的代码,这些代码是在更高版本的 Android studio 上构建的。然后我将我的 android 工作室从 3.3.2 升级到 3.5.3 并解决了问题。
我在尝试迁移到 AndroidX 时遇到了这个问题。
初始参数:AStudio 4.0,Gradle插件v4.0.0,Gradlev6.1.1.
我在应用程序中替换了 build.gradle 配置:
dataBinding { enabled = true }
至
dataBinding.enabled = true
并更新:
黄油刀 9.0.0 => 10.2.1
匕首 2.7 => 2.27(必需)
在我的例子中,我有一些静态导入用于一些后来被删除的变量,并且在项目重新加载android工作室试图导入它们一切顺利分开。
因此,仔细查看项目中的最新更改,尤其是您一定会弄清楚的任何静态导入。
您需要添加插件:
kotlin-kapt
我在我的应用程序中使用 Room,这个问题是由实体主键上缺少 @NonNull
注释引起的。添加注释解决了问题。
我知道这已经晚了,但我希望在经历了一个小时的困惑之后,我可以帮助其他人解决错误。
在我的项目中使用匕首柄复制依赖提供方法时出现此错误,例如:
@Singleton @Binds public abstract ISettingsCacheDataSource provideSettingsCacheDataSource(SettingsCacheDataSourceImpl dataSource);
复制此代码导致此错误出现,删除重复项或使用其他依赖项修复它已为我修复。
可能无法生成 BR 的另一个原因是,您的 Android Gradle 插件早于 4.0.0,并且您没有像这样启用数据绑定:
buildFeatures{
dataBinding = true
}
我尝试在我现有的项目中使用数据绑定,但我无法构建它。
在项目 build.gradle
中使用:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
//Data Binding Beta
classpath "com.android.databinding:dataBinder:1.0-rc4"
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.7+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
正在申请
apply plugin: 'com.android.databinding'
apply plugin: 'com.neenbedankt.android-apt'`
在模块中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
apt 'com.android.databinding:compiler:1.0-rc1+'
}
我尝试将数据绑定与 RecyclerView/Fragment/ViewHolder/Adapter.. 我使用 Android Studio 1.4.1。 使用 compileSdkVersion 23 和 buildToolsVersion“23.0.1”。 我在没有 apt 的情况下尝试过,不同的 gradle 版本,证明阅读了我的 classes/xml.. 我还使用 Butterknife(因为我的项目太大,无法一次更改所有内容)和其他(但不相关的)库。 我同步并重建了我的项目,我 closed/opened Android Studio,我试图使缓存无效。我从一开始就构建了一个 'fresh' 示例,效果很好。
我的 getter 我的 "data class" 方法是@Bindable。
此外,未创建数据绑定包。 (错误消息说它不存在)和 Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21
我遇到过与您类似的 DataBinding 问题,例如 Android Studio 无法找到生成的绑定 class,例如 "MainActivityBinding"。重新启动 Android Studio 帮我解决了这个问题。
至于 BR classes,我遇到过找不到它们的问题,但通常是因为我在布局中犯了一个错误-class。例如绑定到一个不存在的字段。确保其他一切正确,然后重新启动 Android Studio。
我几乎每次尝试对自定义对象使用 ObservableList
时都会遇到 Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21
错误。但我发现,几乎每次我在输入后都忘记了 >
。傻我。
所以,我的解决方案是检查它:
<data>
<import type="android.databinding.ObservableArrayList"/>
<variable
name="dices"
type="ObservableArrayList<Dice>" /> //don't forget the '>' after Dice
</data>
更新后 Android Studio 到版本 2.3 和 Gradle 3.3 我遇到了这个错误,我的解决方案是将其添加到我的 build.gradle(app) 文件
apt 'com.android.databinding:compiler:2.3.0'
我长期使用数据绑定,我想出了一些要点,对你也有帮助。
此答案将帮助您在 ViewDataBinding
class.[=71 中生成 ViewDataBinding
、BindingResource(BR)
class 和布局变量=]
6个避免卡在绑定中的技巧。
(1) 您应该在 build.gradle
中 启用数据绑定 。如果没有,则添加此和 Sync.
android {
...
dataBinding {
enabled = true
}
...
}
(2) 现在如果你想生成数据绑定 class 那么你应该 用数据绑定包裹 xml layout
(<layout
标签)。像这样。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
(3) 现在应该生成数据绑定 class。
If your layout name is in snake case
activity_main.xml
then data binding class will be generated in camel case likeActivityMainBinding
.
有时当您键入 ActivityMai...
时,它 不会显示建议 ,但 会不是说 class 是 未生成 。在这种情况下,您应该 键入预期生成的 class 的全名 。就像键入 ActivityMainBinding
一样,它 将显示导入弹出窗口 。 (这就是我多次遇到的问题。)
(4) 如果仍然没有生成你的class。 (有时当我们粘贴布局文件时,它就会发生)。然后 从 Build> Rebuild
重建项目(不是构建或制作项目)。它将生成您的数据绑定 class。 (Rebuild 总是对我有魔力。)
(5) 如果您在布局中创建了 <variable
而它 没有在数据绑定 class 中显示其 setter 和 getter,然后 按照第 4 个点 .
(6) 如果您的 class 没有生成,那么您应该 检查构建是否因错误而失败 在你的布局文件中。数据绑定 class 将在构建成功时生成。
这就是我为解决数据绑定错误所做的全部工作。如果您有任何进一步的问题,可以在这里发表评论。
有时 DataBinding 会显示不相关的错误,但在我的情况下我忘了添加 应用插件:'kotlin-kapt' 在您的 Gradle 应用程序文件中
错误实际上可能不是由于数据绑定造成的。 Javac 截断错误日志,因此可能不会显示实际问题。
看看这个 link。 https://movieos.org/2017/android-room-data-binding-compile-time-errors/
对于 AndroidX 项目:
我在迁移到androidx后遇到了这个问题,我就是这样解决的。
- BR class 是在您重建项目时从数据绑定自动生成的。
但是如果错误依旧,在下面添加代码 你的导入然后重建项目。
import androidx.databinding.library.baseAdapters.BR;
将您的项目转换为 android x,然后从下面的包中导入 BR class 导入 androidx.databinding.library.baseAdapters.BR
在我的例子中,我已经更新了我的代码,这些代码是在更高版本的 Android studio 上构建的。然后我将我的 android 工作室从 3.3.2 升级到 3.5.3 并解决了问题。
我在尝试迁移到 AndroidX 时遇到了这个问题。
初始参数:AStudio 4.0,Gradle插件v4.0.0,Gradlev6.1.1.
我在应用程序中替换了 build.gradle 配置:
dataBinding { enabled = true }
至
dataBinding.enabled = true
并更新:
黄油刀 9.0.0 => 10.2.1
匕首 2.7 => 2.27(必需)
在我的例子中,我有一些静态导入用于一些后来被删除的变量,并且在项目重新加载android工作室试图导入它们一切顺利分开。
因此,仔细查看项目中的最新更改,尤其是您一定会弄清楚的任何静态导入。
您需要添加插件:
kotlin-kapt
我在我的应用程序中使用 Room,这个问题是由实体主键上缺少 @NonNull
注释引起的。添加注释解决了问题。
我知道这已经晚了,但我希望在经历了一个小时的困惑之后,我可以帮助其他人解决错误。
在我的项目中使用匕首柄复制依赖提供方法时出现此错误,例如:
@Singleton @Binds public abstract ISettingsCacheDataSource provideSettingsCacheDataSource(SettingsCacheDataSourceImpl dataSource);
复制此代码导致此错误出现,删除重复项或使用其他依赖项修复它已为我修复。
可能无法生成 BR 的另一个原因是,您的 Android Gradle 插件早于 4.0.0,并且您没有像这样启用数据绑定:
buildFeatures{
dataBinding = true
}