我正在尝试将数据绑定与 Android 一起使用。
我不能再建立我的项目了。我收到了这个错误:
“错误:(13, 46) 错误:包 ch.company.project.databinding 不存在”
这是我的gradle
:
和
这里是gradle输出:
我正在尝试将数据绑定与 Android 一起使用。
我不能再建立我的项目了。我收到了这个错误:
“错误:(13, 46) 错误:包 ch.company.project.databinding 不存在”
这是我的gradle
:
和
这里是gradle输出:
感谢伊吉特!
该问题没有直接链接到 Android 数据绑定。项目中存在错误(某些变量未正确设置)
我建议将 gradle 与“--debug 和--stacktrace”一起使用以获取更多信息,这很有帮助。
早些时候我的包名是“com.xyz.abc.Models”,将包名改为所有小写字母“Models”->“models”
解决了这个问题。
该错误不是 DataBinding 包,而是语法或逻辑错误。例如,您的 POJO 中有属性“lastName”,但在布局中它是android:text="@{user.lastname}"
.
检查您的“布局”并执行重建项目。
我对接受的答案不满意,它告诉您在没有提示的情况下进行堆栈跟踪。
以下是导致此问题的一些可能原因。检查您是否没有执行以下任何操作。
基本上Android DataBinding还没有那么成熟。它会失败很多次而没有适当的错误。
因此,如果您有类似的问题package ch.company.project.databinding does not exist"
。
首先,一一检查您最近编辑的布局xml 是否有错误(对于错误imports
& variables
)。在这种情况下,我通常不会得到正确的错误。
检查布局元素中绑定块 ({...}) 中的数据绑定语法是否有错误。在一种布局中工作后始终重建(而不是构建)项目。
检查您的@BindingAdapter
方法是否具有正确的参数。例如imageUrl
绑定适配器将接受ImageView
或View
作为第一个参数。
在一个布局中完成工作后,您应该始终重建项目。
如果您无法通过上述步骤找到错误,请尝试--debug and --stacktrace
在 compile 选项
File> Settings> Build, Execution, Deployment> Compiler> Command-line Options
确保您的包名称以小写字母开头。在我的情况下,经过两个小时的斗争后问题解决了
我得到了错误:
错误:(9, 46) 错误: com.company.www.bar.databinding 包不存在。
我只是删除“=”符号。它对我有用
由此 :
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@={()->activity.onButtonClick()}"/>
至 :
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{()->activity.onButtonClick()}"/>
我的项目有类似的问题
你可以试试:
在我的特殊情况下,我使用的是 Dagger 2。这个包错误出现在很多类中,与原始错误没有任何关系:依赖注入错误。
快乐提醒:在您的堆栈跟踪上滚动更多内容以了解真正的问题。
我被同样的错误困住了好几个小时。在尝试了 stackoverflow 的几个解决方案后,我用稳定的 gradle 依赖项更新了我的项目。
仍然没有解决,但是DataBinding
在我的另一个项目中,使用相同的 gradle 依赖项可以正常工作。
所以,我使用资源管理器进入项目文件夹并删除了 2 件事。
- 构建文件夹
- .idea/libraries 中的所有文件
之后我同步了项目,它继续工作得很好。
包名必须以Small Letters开头。否则,Binding 库无法理解它是类还是包。此外,您不需要全部使用小写字母。
示例,错误用法:
package com.thecompany.activity.ContactInfo; //Problem is ContactInfo, 'C'.
例如,TRUE用法:
package com.thecompany.activity.contactInfo; //Solution is contactInfo, 'c'.
确保您在布局中引用的模型字段具有public
访问修饰符
改变
{ databinding = true}
至
buildFeatures{
dataBinding = true
}
如果您因为在 Android Studio Artic Fox 中切换到 JDK11 并且您的视图绑定在 UI 中但在执行期间没有中断而遇到这个问题,那么请注意这是一个已知问题,应该在 Bumble Bee 中解决:
https://issuetracker.google.com/issues/180946610
当前的修复是切换回 JDK8(或安装 Bumble Bee 金丝雀版本)。
要消除此错误,只需将完整的布局设计包含在activity_main.xml
文件中的普通布局标记中。
在浪费了很多时间寻找解决方案之后,这对我有用。试试看。
如果你尝试了这个步骤
android.databinding.enableV2=false
android.enableExperimentalFeatureDatabinding=true
并检查所有 xml 文件看起来不错。那么你应该使用这个解决方案,在项目级 build.gradle 中添加以下代码
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "1000"
}
}
}
这将为您提供实际错误解释的确切错误:上面的代码将增加编译错误的大小
就我而言,我遵循 android 文档:
buildFeatures {
viewBinding true
}
使用“=”代替空格
buildFeatures {
viewBinding = true
}
尝试以下Refactor
->migrate to androidx
并且在build.grade(:app)
implementation 'androidx.appcompat:appcompat:1.0.0'
或使用新版本发布
implementation 'androidx.databinding:databinding-runtime:4.1.0'
确保如果您的布局文件名以以下格式命名:<name>_activity.xml
您的绑定类名称也符合以下格式:<name>ActivityBinding
对我来说,将我的布局文件名从 更改activity_login.xml
为login_activity.xml
解决了这个问题,因为我的绑定类名是LoginActivityBinding
.
这是来自Android 布局和绑定表达式页面的一个例外,其中提到了这一点:
为每个布局文件生成一个绑定类。默认情况下,类的名称是基于布局文件的名称,将其转换为 Pascal 大小写并为其添加 Binding 后缀。上面的布局文件名是activity_main.xml,所以对应生成的类是ActivityMainBinding