我尝试在现有项目中使用数据绑定,但我无法构建它。
在项目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
答案 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<Dice>" /> //don't forget the '>' after Dice
</data>
答案 3 :(得分:2)
我长期以来一直在使用数据绑定,并且提出了一些关键点,它们也可以为您提供帮助。
此答案将帮助您在ViewDataBinding
类中生成BindingResource(BR)
,ViewDataBinding
类和布局变量。
(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后遇到了这个问题,这就是我解决的方法。
但是,如果错误仍然存在,请在下面的代码中添加 您的导入然后重建项目。
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;