【问题标题】:Data Binding: Cannot find symbol class BR数据绑定:找不到符号类 BR
【发布时间】:2015-10-26 10:25:51
【问题描述】:

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

项目中使用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

【问题讨论】:

标签: android android-databinding


【解决方案1】:

对于 AndroidX 项目:

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

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

    import androidx.databinding.library.baseAdapters.BR;
    

【讨论】:

  • 我很高兴它对你有用。 @HemangNirmal
【解决方案2】:

你需要添加插件:

kotlin-kapt

【讨论】:

    【解决方案3】:

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

    初始参数:AStudio 4.0、Gradle Plugin v4.0.0、Gradle v6.1.1。

    我在 app build.gradle config 中替换了:

    dataBinding { enabled = true }
    

    dataBinding.enabled = true
    

    并更新:

    黄油刀 9.0.0 => 10.2.1

    匕首 2.7 => 2.27(必需)

    【讨论】:

      【解决方案4】:

      我用数据绑定很久了,想出了一些关键点,对你也有帮助。

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

      避免卡在装订中的 6 条提示。

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

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

      (2) 现在如果你想生成数据绑定类,那么你应该用数据绑定包装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) 现在应该生成您的数据绑定类。

      如果你的布局名称是 snake case activity_main.xml 然后是数据绑定类 将在 camel case 中生成,例如 ActivityMainBinding

      有时当你输入 ActivityMai... 时,它不显示建议,但那并不意味着类是不生成。在这种情况下,您应该输入预期生成的类的全名。就像输入 ActivityMainBinding 一样,它将显示导入弹出窗口。 (这是我多次遇到的问题。)

      (4) 如果仍然没有生成你的类。 (有时当我们粘贴布局文件时,它会发生)。然后从Build&gt; Rebuild重建项目不构建或制作项目)。它将生成您的数据绑定类。 (Rebuild 一直对我有魔力。

      (5) 如果您在布局中创建了 &lt;variable 并且它不会在数据中显示其 setter 和 getter绑定类,然后按照第四点

      (6) 如果您的类没有生成,那么您应该检查构建是否由于布局文件中的错误而失败。成功构建后将生成数据绑定类。

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

      【讨论】:

      • 我已经启用了 dataBinding enabled true 但仍然出现此错误@Khemraj
      【解决方案5】:

      我在 DataBinding 方面遇到了与您类似的不同问题,例如 Android Studio 无法找到生成的 Binding 类,如“MainActivityBinding”。重新启动 Android Studio 为我解决了这个问题。

      至于 BR 类,我遇到了找不到它们的问题,但通常是因为我在布局类中犯了一个错误。例如绑定到不存在的字段。确保其他一切都正确,然后重新启动 Android Studio。

      【讨论】:

      • 重新启动 android studio 为我完成了这项工作。谢谢
      【解决方案6】:

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

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

      【讨论】:

      • 我想应该从 apt 转移到注释处理器?而是使用这个:annotationProcessor 'com.android.databinding:compiler:2.3.0'
      【解决方案7】:

      有时 DataBinding 会显示不相关的错误,但在我的情况下,我忘了添加 应用插件:'kotlin-kapt' 在你的 Gradle 应用文件中

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

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

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

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

                在我的例子中,我有一些静态导入用于一些后来被删除的变量,并且在项目重新加载时,android studio 尝试导入它们,一切都崩溃了。

                所以仔细查看您项目中的最新更改,尤其是您肯定会发现的任何静态导入。

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

                    我知道这已经很晚了,但我希望我能在经过一个小时的困惑之后帮助我尝试解决错误的人。

                    我的项目中使用匕首复制依赖提供方法时出现此错误,例如:

                    @Singleton @Binds public abstract ISettingsCacheDataSource provideSettingsCacheDataSource(SettingsCacheDataSourceImpl dataSource);

                    复制此代码导致出现此错误,删除重复项或使用其他依赖项修复它为我修复了它。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-12-23
                      • 2020-05-09
                      • 2019-05-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-10-12
                      相关资源
                      最近更新 更多