上一篇
安卓如何链接服务器
- 行业动态
- 2025-04-21
- 6
安卓连接服务器的实现方式
HTTP/HTTPS请求
适用场景:RESTful API调用、文件下载、提交表单等。
常用库:OkHttp、Retrofit、Volley。
步骤 | 说明 | 代码示例(OkHttp) |
---|---|---|
添加网络权限 | 在AndroidManifest.xml 中声明INTERNET 权限。 |
xml <uses-permission android:name="android.permission.INTERNET" /> |
检查网络状态 | 避免因无网络导致崩溃。 | java ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); boolean connected = cm.getActiveNetworkInfo() != null; |
创建请求 | 同步/异步请求,推荐异步避免阻塞主线程。 | java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("https://example.com/api").build(); client.newCall(request).enqueue(new Callback() { ... }); |
处理响应 | 解析JSON/XML或处理流数据。 | java @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { String body = response.body().string(); // 解析数据 } } |
WebSocket长连接
适用场景:实时聊天、股票行情、游戏等需要持续通信的场景。
常用库:OkHttp WebSocket、Socket.IO。
步骤 | 说明 | 代码示例(OkHttp) |
---|---|---|
建立连接 | 通过Request 创建WebSocket。 |
“`java Request request = new Request.Builder().url(“wss://example.com/socket”).build(); WebSocket ws = client.newWebSocket(request, new WebSocketListener() { … }); |
收发消息 | 监听onMessage 事件并发送数据。 |
java @Override public void onMessage(WebSocket webSocket, String text) { webSocket.send("回应: " + text); } |
断线重连 | 监听onFailure 并尝试重连。 |
java @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { // 延迟重连 } |
TCP/UDP Socket编程
适用场景:自定义协议传输、局域网通信、文件传输。
注意:需处理线程和IO流。
步骤 | 说明 | 代码示例(TCP) |
---|---|---|
创建Socket | 指定服务器IP和端口。 | java Socket socket = new Socket("192.168.1.1", 8080); |
发送数据 | 通过OutputStream 写入数据。 |
java PrintWriter out = new PrintWriter(socket.getOutputStream()); out.println("Hello Server"); out.flush(); |
接收数据 | 通过InputStream 读取响应。 |
java BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = in.readLine(); |
关闭连接 | 释放资源。 | java socket.close(); |
常见问题与解决方案
网络请求失败或超时
- 原因:网络不可用、服务器地址错误、防火墙拦截。
- 解决方案:
- 检查
AndroidManifest
中的网络权限。 - 使用
ConnectivityManager
确认网络状态。 - 设置超时时间:
client.setConnectTimeout(10, TimeUnit.SECONDS);
。
- 检查
HTTPS证书校验失败
- 原因:服务器使用自签名证书或证书不被信任。
- 解决方案:
- 忽略证书校验(仅限测试环境):
java client.sslSocketFactory(new SSLContext().getSocketFactory(), trustManager);
- 生产环境建议使用可信证书或配置证书信任白名单。
- 忽略证书校验(仅限测试环境):
相关问题与解答
问题1:如何优化安卓网络请求的性能?
解答:
- 缓存响应:使用
OkHttp
的缓存机制或第三方库(如Glide
)。 - 压缩数据:启用GZIP压缩(服务器和客户端均需支持)。
- 合并请求:减少频繁的网络调用,批量处理数据。
- 异步处理:避免阻塞UI线程,使用
ExecutorService
或协程。
问题2:如何在安卓中处理大文件上传?
解答:
- 分片上传:将文件分割为多个小块(如1MB/片),逐片上传并支持断点续传。
- 使用进度监听:通过
OkHttp
的ProgressResponseBody
或Retrofit
的Callback
监控上传进度。 - 后台服务:在
Service
或WorkManager
中执行上传任务,避免Activity被回收导致