14

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

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

4

14 回答 14

13

对于 AndroidX 项目:

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

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

    import androidx.databinding.library.baseAdapters.BR;
    
于 2019-12-30T22:51:16.107 回答
6

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

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

于 2015-10-29T12:50:18.417 回答
4

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

apt 'com.android.databinding:compiler:2.3.0'
于 2017-03-16T19:50:34.110 回答
4

我长期使用数据绑定,我想出了一些关键点,这也可以帮助你。

这个答案将帮助您在课堂上生成ViewDataBindingBindingResource(BR)类和布局变量ViewDataBinding

6 提示不要卡在装订中。

(1)您应该在中启用数据绑定build.gradle。如果没有,那么添加这个和Sync

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)现在应该生成您的数据绑定类。

如果您的布局名称为蛇形 activity_main.xml,则数据绑定类将以驼峰式生成,例如ActivityMainBinding.

有时当您键入时ActivityMai...,它不显示建议,但这并不意味着没有生成类。在这种情况下,您应该输入预期生成的类的全名。像 type 一样ActivityMainBinding,它会显示 import popup。(这就是我多次面临的问题。)

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

(5)<variable如果您在布局中创建了一个并且它没有在数据绑定类中显示它的 setter 和 getter,那么请遵循第 4 点

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

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

于 2018-08-09T10:18:07.707 回答
2

您需要添加插件:

kotlin-kapt
于 2020-10-30T15:21:44.470 回答
2

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

    <data>

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

        <variable
            name="dices"
            type="ObservableArrayList&lt;Dice>" /> //don't forget the '>' after Dice
    </data>
于 2016-02-23T07:53:46.860 回答
1

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

于 2018-12-03T15:41:26.033 回答
1

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

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

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

dataBinding { enabled = true }

dataBinding.enabled = true

并更新:

黄油刀 9.0.0 => 10.2.1

匕首 2.7 => 2.27(必需)

于 2020-07-13T08:32:41.003 回答
0

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

于 2020-02-24T14:47:37.597 回答
0

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

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

于 2019-04-30T23:27:06.940 回答
0

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

于 2021-02-25T20:34:47.837 回答
0

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

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

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

复制此代码会显示此错误,并删除重复项或使用其他依赖项修复它为我修复了它。

于 2021-09-09T23:36:52.993 回答
0

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

于 2020-01-12T12:26:37.810 回答
0

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

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

于 2020-10-22T11:51:44.613 回答