数据绑定:找不到符号类BR

时间:2015-10-26 10:25:51

标签: android android-databinding

我尝试在现有项目中使用数据绑定,但我无法构建它。

在项目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版本,证明读取我的类/ xml .. 我还使用Butterknife(因为我的项目太大而无法一次更改所有内容)和其他(但不相关的)库。 我同步并重建了我的项目,我关闭/打开了Android Studio,我试图使缓存无效。我从一开始就构建了一个“新鲜”的例子,它运作良好。

我的“数据类”中的getter方法是@Bindable。

此外,未创建数据绑定包。 (错误消息表明它不存在)和Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21

14 个答案:

答案 0 :(得分:6)

我遇到过类似于你的DataBinding的不同问题,例如Android Studio无法找到生成的Binding类,如“MainActivityBinding”。重启Android Studio解决了它。

对于BR类,我遇到过没有被发现的问题,但通常是因为我在布局类中犯了一个错误。例如绑定到不存在的字段。确保其他所有内容都正确无误,然后重启Android Studio。

答案 1 :(得分:4)

Android Studio 更新到版本2.3 Gradle 3.3 后,我遇到了此错误,我的解决方案是将此添加到我的 build.gradle(app) file

apt 'com.android.databinding:compiler:2.3.0'

答案 2 :(得分:2)

我几乎每次尝试将Error:cannot generate view binders java.lang.StringIndexOutOfBoundsException: String index out of range: -21与自定义对象一起使用时,都会收到ObservableList错误。但我发现,几乎每次我忘记了>后我的类型。傻我。 所以,我的解决方案是检查它:

    <data>

        <import type="android.databinding.ObservableArrayList"/>

        <variable
            name="dices"
            type="ObservableArrayList&lt;Dice>" /> //don't forget the '>' after Dice
    </data>

答案 3 :(得分:2)

我长期以来一直在使用数据绑定,并且提出了一些关键点,它们也可以为您提供帮助。

此答案将帮助您在ViewDataBinding类中生成BindingResource(BR)ViewDataBinding类和布局变量。

6条提示,不要束缚住绑定。

(1),您应该在build.gradle中启用数据绑定。如果没有,则添加它并同步

android {
...
   dataBinding {
        enabled = true
    }
...
}

(2)现在,如果要生成数据绑定类,则应用数据绑定<{1}包裹 {{1} } 标签)。像这样的东西。

xml layout

(3)现在应该生成您的数据绑定类。

  

如果您的布局名称为蛇形 <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>

有时,当您键入 activity_main.xml 时,它不显示建议,但是并不表示未生成。在这种情况下,您应该键入预期生成的类的全名。像类型ActivityMainBinding一样,它将显示导入弹出窗口。 (这就是我多次面对的问题。)

(4)如果仍然没有生成您的班级。 (有时,当我们粘贴布局文件时,它会发生)。然后从ActivityMai... 重建项目不构建或制作项目)。它将生成您的数据绑定类。 (重建一直为我做魔术。

(5)如果您在布局中创建了 ActivityMainBinding ,但它未显示其设置者和获取者在数据绑定类中,然后遵循第4点

(6)即使您的班级没有生成,您也应该检查布局文件中的构建是否因错误而失败。数据绑定类将成功生成。

这就是我为解决我的数据绑定错误所做的一切。如果您还有其他问题,可以在这里发表评论。

答案 4 :(得分:1)

有时DataBinding将显示不相关的错误,但就我而言,我忘记添加 应用插件:“ kotlin-kapt” 在您的Gradle应用文件中

答案 5 :(得分:0)

错误实际上可能不是由于数据绑定引起的。 Javac会截断错误日志,因此可能不会显示实际问题。

查看此链接。 https://movieos.org/2017/android-room-data-binding-compile-time-errors/

答案 6 :(得分:0)

对于AndroidX项目:

我在迁移到androidx后遇到了这个问题,这就是我解决的方法。

  • 重建项目时,BR类是根据数据绑定自动生成的。
  • 但是,如果错误仍然存​​在,请在下面的代码中添加 您的导入然后重建项目。

    import androidx.databinding.library.baseAdapters.BR;
    

答案 7 :(得分:0)

将您的项目转换为android x,然后从下面的包中导入BR类 导入androidx.databinding.library.baseAdapters.BR

答案 8 :(得分:0)

就我而言,我已经从基于Android Studio更高版本构建的项目中更新了代码。然后,我将Android Studio从3.3.2升级到3.5.3,并解决了问题。

答案 9 :(得分:0)

当我尝试迁移到AndroidX时遇到了这个问题。

初始参数:AStudio 4.0,Gradle插件v4.0.0,Gradle v6.1.1。

我在应用程序build.gradle配置中替换了

dataBinding { enabled = true }

dataBinding.enabled = true

并更新:

黄油刀9.0.0 => 10.2.1

dagger 2.7 => 2.27(必需)

答案 10 :(得分:0)

对于我来说,我有一些变量的静态导入,这些变量后来被删除了,在项目重新加载时,android studio试图导入它们,一切都崩溃了。

因此,仔细查看项目中的最新更改,尤其是您一定会发现的静态导入。

答案 11 :(得分:0)

您需要添加插件:

kotlin-kapt

答案 12 :(得分:0)

我在我的应用程序中使用了 Room,这个问题是由实体主键上缺少 @NonNull 注释引起的。添加注释解决了问题。

答案 13 :(得分:-1)

“ BR”导入文件丢失。

在模型类中添加以下导入文件:

import com.yourpackagename.BR;