安卓与服务端通信的核心是通过网络协议传输数据,常见方式包括:
通信方式 | 特点 | 适用场景 |
---|---|---|
HTTP/HTTPS | 基于TCP/IP,支持RESTful API,简单易用,广泛兼容。 | 常规数据请求(如登录、获取信息) |
WebSocket | 全双工通信,支持长连接,实时性高。 | 实时聊天、推送通知 |
TCP/UDP Socket | 直接通过IP和端口通信,灵活性高,但需处理底层协议。 | 文件传输、音视频流 |
MQTT | 轻量级消息协议,适合物联网设备。 | 设备状态监控、消息订阅 |
服务端与安卓交互的数据需序列化,常见格式:
数据格式 | 特点 | 示例 |
---|---|---|
JSON | 轻量级、可读性强,支持复杂数据结构。 | {"name":"张三","age":25} |
XML | 结构化强,但冗余较大。 | <user><name>张三</name></user> |
Protobuf | 二进制格式,体积小、解析快,跨语言。 | [binary data] |
使用OkHttp发送请求
OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.example.com/data") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { String json = response.body().string(); // 解析JSON } } @Override public void onFailure(Call call, IOException e) { // 处理失败 } });
使用Retrofit简化接口调用
public interface ApiService { @GET("users/{id}") Call<User> getUser(@Path("id") int id); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService api = retrofit.create(ApiService.class);
// 使用OkHttp WebSocket OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("wss://socket.example.com/").build(); WebSocketListener listener = new WebSocketListener() { @Override public void onMessage(WebSocket webSocket, String text) { // 处理收到的消息 } }; WebSocket ws = client.newWebSocket(request, listener);
HTTPS强制校验
在OkHttp中启用证书校验:
OkHttpClient client = new OkHttpClient.Builder() .sslSocketFactory(factory, trustManager) // 自定义证书信任管理器 .build();
数据加密
缓存优化
Cache-Control
头或本地缓存(如Room数据库)减少重复请求。OkHttpClient client = new OkHttpClient.Builder() .cache(new Cache(directory, size)) .build();
问题 | 解决方案 |
---|---|
网络请求超时 | 设置超时时间(timeout ),或使用异步任务+重试机制。 |
JSON解析异常 | 检查字段名是否匹配,使用Gson 或Moshi 库自动映射对象。 |
SSL证书错误 | 自签名证书需客户端信任,或使用第三方库(如TrustManager )绕过校验(慎用)。 |