Android报错java.lang.IllegalArgumentException: class android.text.BoringLayout declares multiple JSON

本文通过一个实际案例,揭示了在将Java对象转换为JSON字符串时,使用toString()方法的重要性。作者最初忽略了toString()的调用,导致数据转换失败,经过一番排查,最终意识到在put操作中直接使用TextView或EditText的getText()方法返回的对象,而非其字符串表示,是问题所在。正确的做法是在put之前,调用toString()方法将对象转换为字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看见这个错误的时候想了半天,没找到错在哪里 ,百度了一大堆,找到原因

 

Map<String, Object> map = new HashMap<>();

map.put("aaa",tv_aa.getText());
map.put("bbb",et_bbb.getText());
map.put("ccc",et_ccc.getText());

String json = new Gson().toJson(map);//要传递的json

开始的时候是这样写的,看了好久没发现传值有什么问题啊 ,后面对比了下前一天写的代码,发现了tostring这个坑,没注意的时候真的会跳下去,记一笔提醒自己 ,正确写法看下面

Map<String, Object> map = new HashMap<>();

map.put("aaa",tv_aa.getText().tostring());

map.put("bbb",et_bbb.getText().tostring());

map.put("ccc",et_ccc.getText().tostring());

String json = new Gson().toJson(map);//要传递的json

加粗加黑

<think>好的,用户遇到了Unity 2020打包时的错误,具体是Java.lang.IllegalArgumentException,提示不支持的class文件主版本61。我需要先理解这个错误的原因。主版本号对应的是Java版本,比如版本61对应的是Java 17,而Unity 2020可能只支持到Java 8或11。所以,用户可能在环境中安装了更高版本的JDK,而Unity 2020无法识别,导致编译失败。 接下来,我需要回忆Unity的版本和对应的JDK要求。Unity 2020通常使用Android Studio的旧版工具链,可能依赖JDK 8。如果用户安装了更新的JDK,比如JDK 17,就会导致主版本号不兼容。因此,解决方案应该是降级到支持的JDK版本,比如JDK 8或11,并确保Unity正确配置使用这个JDK。 然后,我需要考虑用户可能的环境配置,比如是否使用Unity Hub安装的JDK,或者是否自定义了JDK路径。在步骤中,应该包括检查当前JDK版本,下载合适的JDK版本,并在Unity中设置正确的路径。此外,还需要处理可能的环境变量问题,比如JAVA_HOME是否正确指向旧版本。 另外,用户可能遇到的另一个问题是Gradle版本不兼容。高版本的Gradle可能也需要更高版本的JDK,所以需要将Gradle版本降级到与JDK 8兼容的版本,比如Gradle 6.x。同时,清理项目缓存也是必要的步骤,避免旧的构建文件残留导致问题。 还需要注意用户提到的其他引用错误,比如重复的Kotlin类。这可能是因为依赖冲突,需要检查Gradle文件中的依赖项,排除重复的库或者统一版本号。不过用户的主要问题是Java版本不支持,所以重点应放在JDK和Gradle的版本调整上。 最后,要确保提供的步骤清晰,用户能够逐步执行,包括下载链接和具体的路径设置。同时,提醒用户验证安装和重启Unity,确保配置生效。如果问题仍然存在,可能需要进一步检查环境变量或项目设置中的其他配置错误。</think>### Unity 2020打包时Java版本不支持错误的解决方案 #### 错误原因分析 错误`java.lang.IllegalArgumentException: unsupported class file major version 61`表明Unity使用的Java版本与项目要求的版本不兼容。主版本号61对应Java 17[^2],而Unity 2020默认支持的JDK版本通常是Java 8或Java 11[^1]。 --- #### 分步解决方法 1. **检查当前JDK版本** - 打开终端(Windows为CMD/PowerShell,macOS/Linux为Terminal),输入: ```bash java -version ``` - 若版本高于Java 11(如Java 17),需降级。 2. **安装JDK 8或11** - **推荐JDK 8**(Unity 2020官方适配版本): - 下载地址:[Oracle JDK 8](https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html) 或 [OpenJDK 8](https://adoptium.net/temurin/releases/?version=8) - **或选择JDK 11**(部分项目兼容): - 下载地址:[Oracle JDK 11](https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html) 或 [OpenJDK 11](https://adoptium.net/temurin/releases/?version=11) 3. **配置Unity使用指定JDK** - 打开Unity Editor,依次进入: ``` Edit > Preferences > External Tools ``` - 在`JDK`路径中,指向新安装的JDK目录(例如`C:\Program Files\Java\jdk1.8.0_301`)。 4. **修改环境变量(可选但推荐)** - 设置`JAVA_HOME`为JDK 8/11的安装路径。 - 将`%JAVA_HOME%\bin`添加到系统`PATH`变量中。 5. **调整Gradle版本(关键步骤)** - 高版本Gradle(如7.x+)可能强制要求Java 17,需降级至兼容版本: - 打开项目中的`gradle-wrapper.properties`文件(路径:`项目名/Assets/../gradle/wrapper/gradle-wrapper.properties`)。 - 修改`distributionUrl`为低版本(例如Gradle 6.7.1): ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip ``` 6. **清理缓存并重新构建** - 删除项目中的`Library`、`Temp`、`Build`文件夹。 - 重启Unity并尝试重新打包。 --- #### 补充说明 - 若同时遇到`Duplicate class`错误(如引用[3]),需检查Gradle依赖冲突,可通过以下方式解决: - 在`build.gradle`中添加排除规则: ```groovy implementation("com.example:library:1.0.0") { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值