12. 数据解析-索引与概述
JiangMing 2025/5/2 Android 开发基础
第 11 章 完成了"把数据拿回来"——但拿到手的只是 JSON/XML 字符串,UI 需要的是对象。中间这一步就是数据解析:字符串 → 对象叫反序列化(读),对象 → 字符串叫序列化(写),二者合称数据绑定。
# 一、解析在整条链路中的位置
两个要点:
- 解析发生在子线程:网络回调本身就在 OkHttp 的线程里,大 JSON(几百 KB)的解析同样耗时,解析完才切主线程更新 UI(呼应 10 章异步篇)。Retrofit + GsonConverter 会自动完成这一切。
- 序列化与反序列化用同一套库:Retrofit 的
@Body提交对象时,Gson 自动把它序列化成 JSON——所以 12.01 学的 Gson 是"读写双向"的。
# 二、JSON 与 XML:两大格式
| 对比 | JSON | XML |
|---|---|---|
| 体积 | 小(无标签开销) | 大(成对标签) |
| 可读性 | 高 | 高(属性/命名空间表达力强) |
| 解析成本 | 低(现代库直接映射对象) | 需要事件/树遍历 |
| Android 生态 | 服务端接口事实标准 | Android 系统资源格式(layout/manifest)、部分老接口、RSS |
| 解析库 | Gson / Moshi / kotlinx.serialization / org.json | XmlPullParser(内置)/ DOM / SAX |
结论:接口数据无脑选 JSON;XML 主要出现在"读 Android 自己的资源"和少数老接口/RSS 场景。
# 三、本章分节导览
- 12.00 索引与概述(本文):解析链路全景与格式选型
- 12.01 JSON 解析:Gson 全套用法(fromJson/toJson、TypeToken、@SerializedName)、常见坑(字段缺失/泛型擦除/Date)、org.json 与其他库对比
- 12.02 XML 解析与数据模型设计:DOM/SAX/Pull 三种解析器对比与 XmlPullParser 实战
- 12.03 数据模型(DTO)设计:DTO/VO 分层架构图、七条设计原则与完整优秀实践案例、反例对照
- 12.04 图片加载:Bitmap 内存计算与 OOM 根源、Glide 全套用法与三级缓存管线、列表复用错图问题、Coil 对比
# 结束
本节建立了数据解析的全局认知:反序列化/序列化在"网络字节流 → UI 对象"链路中的位置(配图)、解析须在子线程、JSON 与 XML 的生态分工。下一节进入 JSON 主角:12.01 JSON 解析。