Data Binding的报错集合: 例如Error:(10, 54) 错误: 程序包com.kodulf.recyclerviewdatabinding.databinding不存在

本文详细解析了在使用Android Data Binding时遇到的问题,包括找不到指定的Binding类、程序包不存在错误、布局文件语法错误等,并提供了相应的解决方法。通过修复这些问题,实现了更高效、更清晰的布局代码编写。

报错0:找不到MainActivityBinding

官网上面是:MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);

//应该是,官网上面有问题了,应该是ActivityMainBinding,而不是 MainActivityBinding

感谢HoHohong的提醒,应该是这样的:这个Binding类是根据XML名字生成的,官网上用MainActivityBinding是因为它的XML名字为main_activity.xml;但我们在AS新建项目时名字默认为activity_main,所以才得用ActivityMainBinding



报错1程序包com.kodulf.recyclerviewdatabinding.databinding不存在


C:\AdroidProjects\RecyclerViewDataBinding\app\src\main\java\com\kodulf\recyclerviewdatabinding\MainActivity.java

Error:(10, 54) 错误: 程序包com.kodulf.recyclerviewdatabinding.databinding不存在
C:\AdroidProjects\RecyclerViewDataBinding\app\src\main\res\layout\activity_main.xml
Error:(18, 35) Could not find accessor com.kodulf.recyclerviewdatabinding.User.isFriend 
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.

Information:BUILD FAILED



报错分析:MainActivity.java  里面出错的。不能够导入 com.kodulf.recyclerviewdatabinding.databinding 这个包,

com.kodulf.recyclerviewdatabinding.databinding这个包是根据activity_main.xml来自动生成的,


既然找不到这个包,说明activity_main.xml 里面有问题,

而这个问题又是因为

Error:(18, 35) Could not find accessor com.kodulf.recyclerviewdatabinding.User.isFriend 

所以应该是User的类里面的isFriend的属性有问题,

最后我发现了,

我的get方法里面的对应的isFriend的应该是getIsFriend,而我的方法里面确实getFriend



报错2: 与元素类型 "variable" 相关联的 "type" 属性值不能包含 '<' 字符。

Error:Execution failed for task ':app:dataBindingProcessLayoutsDebug'.

> org.xml.sax.SAXParseException; systemId: file:/C:/AdroidProjects/RecyclerViewDataBinding/app/build/intermediates/res/merged/debug/layout/activity_main.xml;lineNumber: 8; columnNumber: 45; 与元素类型 "variable" 相关联的 "type" 属性值不能包含 '<' 字符。


错误的写成了:

<variable name="userList" type="List<User>"/>

应该写成:

<variable name="userList" type="List&lt;User>"/>

报错3:程序包com.kodulf.recyclerviewdatabinding.databinding不存在


C:\AdroidProjects\RecyclerViewDataBinding\app\src\main\java\com\kodulf\recyclerviewdatabinding\MainActivity.java

Error:(10, 54) 错误: 程序包com.kodulf.recyclerviewdatabinding.databinding不存在

错误: cannot find type argument for User in List

错误: cannot generate view binders java.lang.RuntimeException: failure, see logs for details.

  cannot find type argument for User in List

解决方法,写全路劲

<variable name="userList" type="java.util.List&lt;com.kodulf.recyclerviewdatabinding.User>"/>


报错4: 如果报错是:

Source folders generated at incorrect location

Warning:Folder C:\AdroidProjects\XiMaLaYaTing\app\build\intermediates\dataBindingInfo\debug

Warning:Folder C:\AdroidProjects\XiMaLaYaTing\app\build\intermediates\dataBindingInfo\androidTest\debug

Information:3rd-party Gradle plug-ins may be the cause

那么可以忽略



<think>好的,我现在需要解决用户在Java编译时遇到的“程序包com.sun.javafx.binding存在”的错误。首先,我得回忆一下关于Java包管理的知识,尤其是涉及到sun包的情况。根据用户提供的引用内容,特别是引用[2]提到,sun.*包并是Java平台的标准API,属于内部实现,可能会随版本变化,导致兼容性问题。这可能就是问题的主要原因。 接下来,用户提到的错误是关于com.sun.javafx.binding存在。根据引用[5],这个问题可能和JavaFX模块的配置有关。因为JavaFX从Java 11开始再包含在JDK中,需要单独下载并通过模块路径引入。用户可能在编译时没有正确配置模块路径或者缺少JavaFX的依赖。 首先,我需要考虑用户是否在使用Maven或Gradle这样的构建工具。引用[2]中提到的Maven编译问题,解决方案可能涉及到添加依赖或调整编译器参数。例如,在Maven中可能需要添加JavaFX的依赖,并确保作用域设置为正确,比如使用正确的版本。同时,用户可能需要配置--add-opens参数来允许访问内部API,如引用[1]和引用[5]中提到的,通过编译器插件配置这些参数。 另外,引用[4]提到的线程问题虽然和当前错误无关,但说明用户可能在开发JavaFX应用,所以必须确保JavaFX正确集成。对于非Maven项目,用户需要手动下载JavaFX SDK并添加到模块路径。如果是模块化项目,还需要在module-info.java中添加requires javafx.base;等语句。 可能的解决方案步骤包括:检查JavaFX依赖是否正确配置,确保构建工具中包含了必要的模块,添加--add-opens参数以允许访问com.sun.javafx.binding包,或者建议用户避免使用内部API转而使用公开的JavaFX API替代。 另外,用户可能需要更新他们的IDE配置,比如在IntelliJ或Eclipse中设置正确的VM选项和模块路径。如果用户直接使用命令行编译,需要确保javac命令包含--module-path和--add-modules参数指向JavaFX的lib文件夹。 最后,需要提醒用户尽量避免依赖sun.*或com.sun.*包,因为这些内部API稳定,未来可能会被移除或更改,导致代码可维护。建议查找官方提供的API替代方案,比如使用javafx.beans.binding包中的公开类和方法。</think>### 解决“程序包com.sun.javafx.binding存在”的步骤 #### 原因分析 1. **非公开API依赖**:`com.sun.javafx.binding`属于JavaFX内部实现,并非公开API,默认编译时可见[^2][^5]。 2. **模块化缺失**:从Java 9开始引入模块化系统,需显式声明依赖关系或开放内部包访问权限[^1][^5]。 3. **JavaFX未正确配置**:Java 11+需单独下载JavaFX SDK并配置模块路径[^3][^5]。 --- #### 解决方案 ##### 方法1:添加模块开放指令(推荐) 在编译和运行时添加JVM参数,允许访问内部包: ```bash # 编译时 javac --add-exports javafx.base/com.sun.javafx.binding=ALL-UNNAMED -p <javafx-sdk-path>/lib --module-path <javafx-sdk-path>/lib YourClass.java # 运行时 java --add-opens javafx.base/com.sun.javafx.binding=ALL-UNNAMED -p <javafx-sdk-path>/lib -m your.module/your.MainClass ``` ##### 方法2:Maven项目配置 1. **添加JavaFX依赖**(确保版本匹配): ```xml <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-base</artifactId> <version>17.0.1</version> </dependency> ``` 2. **配置编译器插件**: ```xml <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>--add-exports</arg> <arg>javafx.base/com.sun.javafx.binding=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin> </plugins> ``` ##### 方法3:改用公开API(最佳实践) 避免直接使用`com.sun.javafx.binding`,改用`javafx.beans.binding`中的公开类: ```java // 替代示例 import javafx.beans.binding.Bindings; Bindings.createObjectBinding(() -> ...); ``` --- #### 注意事项 - **JavaFX SDK路径**:需从[OpenJFX官网](https://openjfx.io)下载并替换`<javafx-sdk-path>`为实际路径[^5]。 - **IDE配置**:在IntelliJ/Eclipse中需设置`--add-opens`参数(VM Options)[^4]。 ---
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值