网络请求与数据获取
常用网络请求工具
工具名称 |
特点 |
适用场景 |
OkHttp |
轻量级、支持同步/异步请求、自动处理缓存 |
基础网络请求、文件下载 |
Retrofit |
基于OkHttp、支持RESTful API、可配合Gson/Jackson |
复杂API接口调用、动态配置请求 |
Volley |
谷歌官方库、支持图片加载、内置缓存机制 |
轻量级数据交互、列表加载 |
异步请求实现
- 方式1:OkHttp + Thread
new Thread(() -> {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://api.example.com/data").build();
try (Response response = client.newCall(request).execute()) {
String json = response.body().string();
// 解析JSON逻辑
} catch (IOException e) {
e.printStackTrace();
}
}).start();
- 方式2:Retrofit + RxJava
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
ApiService api = retrofit.create(ApiService.class);
api.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> { / 处理数据 / }, throwable -> { / 处理异常 / });
JSON数据解析
解析工具对比
工具 |
优点 |
缺点 |
适用场景 |
JSONObject/JSONArray |
无需第三方库、Android原生支持 |
代码冗长、类型转换麻烦 |
简单JSON结构 |
Gson |
高效、支持复杂对象、注解灵活 |
不支持流式解析 |
标准REST API响应 |
FastJson |
高性能、支持流式解析 |
体积较大、部分特性需手动配置 |
大数据量解析 |
Moshi |
轻量级、Kotlin支持友好 |
社区生态较弱 |
现代Android项目 |
Gson使用示例
// 定义数据模型
class User {
String name;
int age;
}
// 解析JSON字符串
Gson gson = new Gson();
String json = "{"name":"张三","age":25}";
User user = gson.fromJson(json, User.class);
// 处理复杂嵌套结构
class Response<T> {
int code;
T data;
}
Response<List<User>> response = gson.fromJson(json, new TypeToken<Response<List<User>>>(){}.getType());
XML数据解析
解析方式选择
场景 |
推荐工具 |
说明 |
简单DOM树 |
XmlPullParser |
手动控制解析流程,适合移动端 |
复杂XPath |
SAX/DOM解析器 |
需第三方库(如JAXB) |
性能优先 |
Simple XML Framework |
轻量级、支持注解映射 |
XmlPullParser示例
InputStream is = getAssets().open("data.xml");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG && "user".equals(parser.getName())) {
String name = parser.getAttributeValue(null, "name");
// 处理节点属性
}
eventType = parser.next();
}
其他数据格式处理
格式 |
工具 |
关键点 |
Protobuf |
protobuf-java |
高性能二进制协议、需定义.proto文件 |
JSON5 |
Jackson 扩展 |
支持注释、单引号、尾随逗号等宽松语法 |
WebSocket |
OkHttp WebSocket |
实时双向通信、需处理帧分割 |
本地数据存储与解析
存储方式 |
解析逻辑 |
适用场景 |
SharedPreferences |
getString/getInt 等API |
轻量级键值对 |
SQLite |
ContentValues 、Cursor |
结构化查询数据 |
MMKV |
腾讯开源库、直接读写对象 |
高频键值存储 |
相关问题与解答
Q1:如何优化大数据量JSON解析的性能?
A1:

- 使用流式解析(如FastJson的
JSONReader
)逐行处理,减少内存占用。
- 开启多线程并行解析(需注意线程安全)。
- 启用Gson的
JsonReader
缓冲机制,或使用TypeToken
预编译泛型类型。
- 对重复字段使用
@SerializedName
注解统一命名规则。
Q2:Retrofit如何配置多种数据解析方式?
A2:
- 添加多个Converter:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create()) // JSON解析
.addConverterFactory(SimpleXmlConverterFactory.create()) // XML解析
.build();
- 动态切换解析方式:通过定义不同接口方法,Retrofit会根据
@Body
或@Part
自动选择Converter。
- 自定义Converter:实现
Converter.Factory
接口,支持Protobuf等特殊