上一篇
安卓开发怎么连服务器
- 行业动态
- 2025-04-22
- 2
配置网络权限
在 AndroidManifest.xml
中声明网络权限:
<uses-permission android:name="android.permission.INTERNET" />
注意:若涉及敏感操作(如访问Wi-Fi状态),需补充对应权限。
选择网络通信方式
方式 | 适用场景 | 特点 |
---|---|---|
HttpURLConnection | 轻量级请求,简单API调用 | Android原生支持,无需依赖第三方库,但代码较繁琐。 |
OkHttp | 复杂网络请求,高效连接池 | 支持缓存、拦截器、自动重试,社区主流选择。 |
Retrofit | RESTful API对接 | 基于OkHttp,通过注解生成接口,简化HTTP请求代码。 |
Volley | 短时间高频请求(如列表加载) | Google官方库,适合小数据量快速交互。 |
Coroutine + Http | Kotlin协程异步处理 | 现代写法,避免回调嵌套,代码简洁易维护。 |
实现步骤(以Retrofit为例)
添加依赖
// Retrofit核心库 implementation 'com.squareup.retrofit2:retrofit:2.9.0' // Gson解析器(可选) implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
定义API接口
interface ApiService { @GET("users/{id}") // 替换为实际API路径 suspend fun getUser(@Path("id") userId: Int): Response<User> }
创建Retrofit实例
val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") // 基础URL .addConverterFactory(GsonConverterFactory.create()) // 添加解析器 .build() val apiService = retrofit.create(ApiService::class.java)
发起网络请求(协程方式)
// 在ViewModel或CoroutineScope中调用 GlobalScope.launch { try { val response = apiService.getUser(123) if (response.isSuccessful) { val user = response.body()!! // 处理数据 } else { // 处理错误(如404) } } catch (e: Exception) { // 处理异常(如网络断开) } }
异步处理方案对比
方案 | 优点 | 缺点 |
---|---|---|
AsyncTask | 简单快速实现异步 | 生命周期绑定困难,不适用于复杂场景。 |
Handler+Thread | 完全控制线程,灵活度高 | 代码复杂度高,易出现内存泄漏。 |
LiveData+ViewModel | 与UI生命周期绑定,自动更新UI | 需结合架构组件使用。 |
Coroutine | 代码简洁,避免回调地狱,支持挂起函数 | 需熟悉协程语法。 |
安全与优化
- 强制HTTPS:在
network_security_config.xml
中配置:<domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">api.example.com</domain> </domain-config>
- 缓存策略:使用OkHttp缓存或Room数据库存储数据。
- 压缩与加密:对请求体启用GZIP压缩,敏感数据加密后传输。
常见问题与解决方案
问题 | 原因 | 解决方案 |
---|---|---|
NetworkOnMainThreadException | 主线程执行网络请求 | 移至子线程或使用协程。 |
SSLHandshakeException | HTTPS证书不被信任 | 添加证书到trusted 列表,或禁用证书校验(仅限测试环境)。 |
JSON解析失败 | 字段名不匹配/数据格式错误 | 检查API返回字段与模型类是否一致,使用@SerializedName 标注字段名。 |
相关问题与解答
Q1:如何选择合适的网络库?
- 简单请求:优先使用
HttpURLConnection
或 Volley。 - 复杂API:Retrofit + OkHttp 组合更高效。
- Kotlin项目:推荐协程 + Ktor(Kotlin原生HTTP客户端)。
Q2:如何处理SSL证书校验失败?
- 正式环境:确保服务器使用有效证书,客户端无需特殊处理。
- 自签名证书:在OkHttp中添加证书信任逻辑:
val sslContext = SSLContext.getInstance("TLS") val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()) trustManagerFactory.init(null) // 信任所有证书(慎用) sslContext.init(trustManagerFactory.getTrustManagers(), null)