最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
HttpURLConnection - OkHttp + Kotlin
时间:2026-06-12 08:56:47 编辑:袖梨 来源:一聚教程网
HttpURLConnection → OkHttp + Kotlin
老写法(Java + HttpURLConnection)
new Thread(() -> {
HttpURLConnection connection = null;
try {
URL url = new URL("https://api.example.com/data");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000); int code = connection.getResponseCode();
if (code == 200) {
InputStream is = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
final String result = sb.toString(); runOnUiThread(() -> updateUI(result));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) connection.disconnect();
}
}).start();
问题在哪里
手写 Socket 级别的连接管理、超时、流读取,代码量爆炸。线程切换全靠手动 new Thread + runOnUiThread。请求重试、缓存、HTTPS 证书校验全要自己实现,没有拦截器机制。

新写法(OkHttp + Coroutines)
添加依赖:
implementation "com.squareup.okhttp3:okhttp:4.12.0"
private val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build()viewModelScope.launch(Dispatchers.IO) {
val request = Request.Builder()
.url("https://api.example.com/data")
.get()
.build() try {
val response = client.newCall(request).execute()
if (response.isSuccessful) {
val result = response.body?.string() ?: ""
withContext(Dispatchers.Main) {
updateUI(result)
}
}
} catch (e: IOException) {
withContext(Dispatchers.Main) {
showError(e.message)
}
}
}
一句话注意
OkHttp 的 execute() 是同步方法,需要在后台线程调用。enqueue() 是异步回调,但用了协程就尽量用 execute() + 协程管理,避免回调嵌套。
response.body?.string() 只能调用一次,第二次返回空。如果需要反复读,先存到变量里。OkHttp 内部有自己的连接池和线程池,创建一次以单例使用即可,不要每次都 new。
Java Android 老项目迁移系列,持续更新中。
相关文章
- 王者荣耀世界寻路在哪-王世界寻路怎么玩 08-01
- 前程无忧如何进行在线沟通 08-01
- 微信模拟器免费版3.0下载-微信聊天模拟器手机版app下载安装 08-01
- outlook网页版登录入口-outlook邮箱登录入口 08-01
- 樱花动漫下载最新版-樱花动漫最新版本官方下载通道 08-01
- 恋与深空官网入口在哪-官方网站入口介绍 08-01