0

0

Retrofit请求XML接口 Android使用SimpleXmlConverter

月夜之吻

月夜之吻

发布时间:2026-03-04 08:41:02

|

189人浏览过

|

来源于php中文网

原创

simplexmlconverter在android 8.0+需配置network_security_config允许http明文流量;不支持list直接解析,须用@elementlist(inline=true)的根容器类;需排除xpp3冲突、确保无参构造函数、注意kotlin字段可见性及xml命名空间严格匹配。

retrofit请求xml接口 android使用simplexmlconverter

SimpleXmlConverter不支持Android 8.0+默认禁用HTTP明文流量

直接跑不起来,多半是这个原因。Android 8.0(API 26)起,默认禁止应用使用明文 HTTP 请求,而很多老 XML 接口还在用 http:// 地址。Retrofit 本身不拦,但底层 OkHttp 会直接抛 java.net.UnknownServiceException: CLEARTEXT communication to xxx not permitted by network security policy

实操建议:

ChatGPT Writer
ChatGPT Writer

免费 Chrome 扩展程序,使用 ChatGPT AI 生成电子邮件和消息。

下载
  • 检查接口地址是否为 http:// —— 如果是,要么切到 https://,要么在 res/xml/network_security_config.xml 中显式允许该域名的明文通信
  • 别只改 AndroidManifest.xmlandroid:usesCleartextTraffic="true",它在 targetSdkVersion ≥ 28 时对部分域名(如 localhost)也不生效,必须配 network_security_config
  • SimpleXmlConverter 本身不处理网络层,它只管把响应体字节流反序列化成 Java 对象,所以网络不通、404、500 都不是它的问题

SimpleXmlConverterFactory.create() 默认不支持 List 直接解析

写个接口返回一串 <items><item>...</item><item>...</item></items>,然后定义 Call<list>></list>,大概率会崩:Gson 可以这么干,SimpleXML 不行——它需要一个**根容器类**,不能直接映射到裸 List

常见错误现象:org.simpleframework.xml.core.PersistenceException: Constructor not matched for class java.util.ArrayList

实操建议:

  • 定义一个包装类,比如 ItemsResponse,里面用 @ElementList(inline = true) 声明 List<item> items</item>
  • inline = true 很关键:它告诉 SimpleXML 跳过外层 <items></items> 标签,直接从子节点开始解析;不加的话,XML 必须是 <itemsresponse><items><item>...</item></items></itemsresponse>
  • 别在 Item 类里漏掉无参构造函数——SimpleXML 反射实例化时强依赖它

SimpleXML 在 Android 上需手动排除 XPP3 冲突

项目里如果用了其他库(比如旧版 OkHttp、某些支付 SDK),很可能自带了 xpp3xstream,而 SimpleXML 依赖的 simple-xml 默认打包了它自己的 xpp3 实现。运行时可能报 NoClassDefFoundErrorVerifyError,尤其在 Dalvik(低版本 Android)上更明显。

实操建议:

  • app/build.gradledependencies 里,对 simple-xmlexclude
    implementation('org.simpleframework:simple-xml:2.7.1') {
        exclude group: 'xpp3', module: 'xpp3'
    }
  • 同时显式引入轻量兼容版:implementation 'xpp3:xpp3:1.1.4c'(别用 1.1.3.x,有已知 Android 字符集 bug)
  • 如果用了 Kotlin,注意 @Root@Element 这些注解要加在 val 字段上,且字段不能是 private——SimpleXML 不读 Kotlin 编译后的 getter/setter

SimpleXML 解析失败时很难定位具体哪一行出错

不像 JSON 有明确的 offset 和 token 错误,SimpleXML 报错经常是 Unexpected tokenExpected start tag,但没告诉你 XML 第几行、哪个标签。尤其当服务端返回 HTML 错误页(比如 404 时返回了 Nginx 默认页)却当成 XML 解析,就更难排查。

实操建议:

  • 先用 OkHttp 的 LoggingInterceptor 打印原始响应体,确认返回的是真 XML,且编码是 UTF-8(SimpleXML 默认按 UTF-8 解码,服务端若用 GBK 会乱码)
  • 在 Converter 里临时加一层包装:继承 SimpleXmlResponseBodyConverter,在 convert() 里 catch 异常后打印 response.body().string() 前 512 字符(注意只能读一次)
  • XML 命名空间(xmlns)必须严格匹配:服务端写了 xmlns="http://xxx",你的 @Root(namespace = "http://xxx") 就不能少,也不能多空格

真正麻烦的从来不是怎么写注解,而是服务端 XML 格式松散、文档缺失、偶尔夹带 BOM 或非法字符——这些没法靠加依赖解决,得靠日志和耐心对齐。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Kotlin协程编程与Spring Boot集成实践
Kotlin协程编程与Spring Boot集成实践

本专题围绕 Kotlin 协程机制展开,深入讲解挂起函数、协程作用域、结构化并发与异常处理机制,并结合 Spring Boot 展示协程在后端开发中的实际应用。内容涵盖异步接口设计、数据库调用优化、线程资源管理以及性能调优策略,帮助开发者构建更加简洁高效的 Kotlin 后端服务架构。

121

2026.02.12

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

245

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

520

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

588

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

244

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

629

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3613

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

53

2026.01.13

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

3

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 19.8万人学习

Java 教程
Java 教程

共578课时 | 76万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号