讲师中心 微信公众号
AI工具推荐 视频效率加速

Retrofit请求XML接口 Android使用SimpleXmlConverter

阿雪同学_5963

阿雪同学_5963

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

|

229人浏览过

|

来源于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。

实操建议:

Mapbox Android Patterns
Mapbox Android Patterns

Mapbox Maps SDK 在 Android 上的官方集成模式,涵盖安装、添加标记、用户定位、自定义数据、样式、相机控制等功能

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

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

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

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

实操建议:

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

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

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

实操建议:

  • 在 app/build.gradle 的 dependencies 里,对 simple-xml 做 exclude:
    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 token 或 Expected 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工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

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

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

351

2026.02.12

Java Kotlin协程与异步编程实战
Java Kotlin协程与异步编程实战

本专题围绕 Kotlin 协程与异步编程展开,讲解挂起函数、协程作用域、异步任务调度及并发控制方法。通过实际项目案例,帮助开发者提升后端服务性能,实现高效异步任务处理与稳定性保障。

159

2026.04.13

Kotlin Android开发教程大全
Kotlin Android开发教程大全

系统讲解 Google 官方推荐的 Android 开发首选语言 Kotlin 的核心知识与工程实践,涵盖 Kotlin 简洁语法(空安全/数据类/扩展函数/解构声明/作用域函数)与 Java 互操作、集合操作与函数式编程、协程(Coroutines)异步编程(suspend/launch/async/Flow)、Jetpack Compose 声明式 UI 开发(状态管理/组合函数/导航/动画)、MVVM / MVI 架构设计与 Vi

248

2026.06.03

nginx 重启
nginx 重启

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

403

2023.07.27

nginx 配置详解
nginx 配置详解

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

3387

2023.08.04

nginx配置详解
nginx配置详解

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

6105

2023.08.04

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

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

561

2024.02.23

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

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

1476

2024.07.09

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

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

精品课程

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

共162课时 | 44万人学习

Java 教程
Java 教程

共578课时 | 190.6万人学习

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

共64课时 | 9.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn