【问题标题】:Android Databinding : package does not existAndroid数据绑定:包不存在
【发布时间】:2016-02-29 06:57:58
【问题描述】:

我正在尝试在 Android 中使用数据绑定。

我无法再构建我的项目。我收到了这个错误:

"Error:(13, 46) 错误:包 ch.company.project.databinding 没有 存在”

这里是我的gradle

http://pastebin.com/dkXd1Mxr

http://pastebin.com/n9hkFWGQ

这里是 gradle 输出:

https://pastebin.com/w93Rausg

【问题讨论】:

  • 你也可以分享 gradle 输出吗? (使用 --debug 和 --stacktrace)
  • 这是您的错误:/Users/anthonybernardo/Documents/Geomatic/GeomaticReborn/app/src/main/java/ch/geomatic/geomaticreborn/Views/SearchActivity.java:69:错误:找不到符号 10:21:38.018 [错误] [system.err] (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));修复它,项目应该编译。如果没有,请提供完整的输出(不仅仅是错误)。我想查看正在运行的任务,但无论如何,修复此 R.id.search 应该会修复您的编译。
  • 天哪!我认为这是 Android 数据绑定的问题...非常感谢!

标签: android data-binding android-databinding


【解决方案1】:

感谢 Yigit!

问题没有直接链接到 Android 数据绑定。 项目有bug(部分变量设置不正确)

我建议将 gradle 与 "--debug 和 --stacktrace" 一起使用以获取更多信息,这很有帮助。

【讨论】:

  • 这也是我的问题。我将不正确的值传递给 BindingAdapter。 AS2.0没有告诉我,只是上面找不到包的错误。有趣。
  • 我遇到了同样的问题,但仍然无法解决。我在windows机器上使用android studio,你能分享一下使用--debug和--stacktrace的命令吗
【解决方案2】:

之前我的包名是“com.xyz.abc.Models” 将包名改为所有小写字母 "Models" -> "models"

解决了这个问题。

【讨论】:

  • 也解决我的问题
  • 这为我解决了问题。这在 DataBinding 的文档中的任何地方都提到过吗?
  • 解决了我的问题。伟大的@Kamlesh Sahu
【解决方案3】:

该错误不是 DataBinding 包,而是语法或逻辑错误。例如,您的 POJO 中有属性“lastName”,但在布局中它是 android:text="@{user.lastname}"

检查您的“布局”并执行重建项目。

【讨论】:

    【解决方案4】:

    我对接受的答案不满意,它告诉您在没有提示的情况下进行堆栈跟踪。

    以下是导致此问题的一些可能原因。检查您是否未执行以下任何操作。

    基本上Android DataBinding还没有那么成熟。它会在没有适当错误的情况下失败很多次。

    所以如果你有类似package ch.company.project.databinding does not exist" 的问题。

    可能的失败原因:

    • 首先检查你的最近编辑的布局 xml一个一个错误(错误的importsvariables)。在这种情况下,我通常不会得到正确的错误。

    • 检查您在 layout 元素的绑定块 ({...}) 中的数据绑定 语法 是否有错误。 在一个布局中工作后总是重建(而不是构建)项目。

    • 检查您的 @BindingAdapter 方法是否具有正确的参数。例如imageUrl 绑定适配器将接受ImageViewView 作为第一个参数。

    • 您应该始终在一个布局重建项目工作后

    • 如果通过上述步骤都没有发现错误,请在编译选项中尝试--debug and --stacktrace

      File> Settings> Build, Execution, Deployment> Compiler> Command-line Options

    【讨论】:

      【解决方案5】:

      确保您的包名以小写字母开头。 就我而言,经过两个小时的斗争后问题解决了

      【讨论】:

      • 你真的救了我先生!我被困了好几个小时,但记录中没有任何迹象表明这一点。
      【解决方案6】:

      包名应以小写字母开头。 例如 Activity 是错误的,它会给出一个错误而不是 refactor->renameactivities

      【讨论】:

        【解决方案7】:

        我的项目也有类似的问题

        你可以试试:

        • 检查 xml 文件中是否存在导致构建失败的错误
        • 清理项目
        • 文件 -- 使缓存无效/重新启动

        【讨论】:

          【解决方案8】:

          在我的特殊情况下,我使用的是 Dagger 2。这个包错误出现在很多类中,与原始错误没有任何关系:依赖注入错误。

          温馨提示:在您的堆栈跟踪上滚动更多内容以了解真正的问题。

          【讨论】:

          • 谢谢。滚动应该始终是第一步。
          【解决方案9】:

          我被同样的错误困住了好几个小时。在尝试了 stackoverflow 的几个解决方案后,我用稳定的 gradle 依赖项更新了我的项目。

          仍然没有解决,但是具有相同的 gradle 依赖项 DataBinding 在我的另一个项目中运行良好。

          所以,我使用资源管理器进入项目文件夹并删除 2 件事。

          1. 构建文件夹
          2. .idea/libraries 中的所有文件

          之后我同步了项目,它继续工作得很好。

          【讨论】:

            【解决方案10】:

            包名称必须START使用小写字母。否则,Binding 库无法理解它是类还是包。此外,您不需要全部使用小写字母。

            示例,错误用法:

            package com.programmerbrain.activity.ContactInfo; //Problem is ContactInfo, 'C'.
            

            示例,正确用法:

            package com.programmerbrain.activity.contactInfo; //Solution is contactInfo, 'c'.
            

            【讨论】:

            • 感谢@Caner,对我来说,问题是我以大写字母开头命名了一个包。
            【解决方案11】:

            我得到了错误:

            错误:(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()}"/>
            

            【讨论】:

            • 发生这种情况是因为“=”表示双向数据绑定,对于按钮没有意义,但是如果您在某些 EditText 中使用它,当您更改 EditText 中的数据时,数据将在模型也是。
            【解决方案12】:

            确保您在布局中引用的模型字段具有public 访问修饰符

            【讨论】:

              【解决方案13】:

              改变

              { databinding = true}
              

              buildFeatures{
                   dataBinding = true
                  
              }
              

              【讨论】:

                【解决方案14】:

                如果您因为在 Android Studio Artic Fox 中切换到 JDK11 并且您的视图绑定在 UI 中但在执行期间没有中断而遇到这个问题,那么请注意这是一个已知问题,应该在 Bumble Bee 中解决:

                https://issuetracker.google.com/issues/180946610

                当前的修复是切换回 JDK8(或安装 Bumble Bee 金丝雀版本)。

                【讨论】:

                • 有趣的是,将此添加到我的构建 gradle 似乎可以解决问题apply plugin: 'kotlin-android-extensions
                【解决方案15】:

                要消除此错误,只需将您的完整布局设计包含在 activity_main.xml 文件中的普通布局标记中。

                在浪费了很多时间寻找解决方案之后,这对我有用。试试看吧。

                【讨论】:

                  【解决方案16】:

                  如果你尝试了这些步骤

                  1. 无效/重启`
                  2. 将此属性保留在gradel.properties 中
                  android.databinding.enableV2=false
                  android.enableExperimentalFeatureDatabinding=true
                  

                  检查所有 xml 文件看起来不错。 那么你应该使用这个解决方案,在项目级 build.gradle 中添加以下代码

                      allprojects {
                      gradle.projectsEvaluated {
                          tasks.withType(JavaCompile) {
                              options.compilerArgs << "-Xmaxerrs" << "1000"
                          }
                      }
                  }
                  

                  这将为您提供实际错误的确切错误 说明:以上代码会增加编译错误的大小

                  【讨论】:

                    【解决方案17】:

                    就我而言,我遵循 android 文档:

                    buildFeatures {
                        viewBinding true
                    }
                    

                    使用“=”代替空格

                    buildFeatures {
                        viewBinding = true
                    }
                    

                    【讨论】:

                      【解决方案18】:

                      尝试关注Refactor -> migrate to androidx

                      build.grade(:app)

                      implementation 'androidx.appcompat:appcompat:1.0.0'
                      

                      或使用新版本发布

                      implementation 'androidx.databinding:databinding-runtime:4.1.0'
                      

                      【讨论】:

                        【解决方案19】:

                        如果您的布局文件名以以下格式命名:&lt;name&gt;_activity.xml,请确保您的绑定类名称也符合以下格式:&lt;name&gt;ActivityBinding

                        对我来说,将我的布局文件名从 activity_login.xml 更改为 login_activity.xml 解决了这个问题,因为我的绑定类名称是 LoginActivityBinding

                        这是Android Layouts and binding expressions page 中提到的一个例外:

                        为每个布局文件生成一个绑定类。默认情况下,类的名称是基于布局文件的名称,将其转换为 Pascal 大小写并为其添加 Binding 后缀。上面的布局文件名是activity_main.xml,所以对应生成的类是ActivityMainBinding

                        【讨论】:

                          猜你喜欢
                          • 2018-11-24
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-03-27
                          • 1970-01-01
                          • 2016-12-24
                          • 1970-01-01
                          • 2020-05-04
                          • 2019-05-04
                          相关资源
                          最近更新 更多