提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、okhttp是什么?
- 二、使用步骤
- 1.引入库
- 2.建立连接,请求数据
- 2-1 GET请求
- 2-2 POST请求
- 总结
前言
这段时间由于项目需求,一直在研究原生Android。比起各种移动web前端框架来说Android确实书写较慢,难度较高,但就运行速度而言确实提高不少。本篇就开发过程中的与后台数据交互谈一谈好用的okhttp
一、okhttp是什么?
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso) 用于替代HttpUrlConnection和Apache HttpClient。
其优势在于
- 允许连接到同一个主机地址的所有请求,提高请求效率
- 共享Socket,减少对服务器的请求次数
- 通过连接池,减少了请求延迟
- 缓存响应数据来减少重复的网络请求
- 减少了对数据流量的消耗
- 自动处理GZip压缩
二、使用步骤
1.引入库
代码如下(示例):
只需在build.gradle(Module: XXX.app)文件的dependencies中放入下列语句Androidstudio会自动下载
implementation 'com.squareup.okhttp3:okhttp:4.1.0'
2.建立连接,请求数据
2-1 GET请求
代码如下(示例):
public void getData(String username) {
new Thread(new Runnable() {
@Override
public void run() {
MediaType contentType = MediaType.parse("application/json;charset=utf-8");//数据报头,生命数据解析格式
try {
Request request = new Request.Builder()
.url("http://125.125.125.125:8080/xxx?servernum=" + username)
.build();
OkHttpClient client = new OkHttpClient(); //实例化okhttp对象
Response response = client.newCall(request).execute(); //实例化响应对象
String result = response.body().string();
JSONObject resJson = new JSONObject(result); //解析响应结果(响应参数为json格式)
boolean success = resJson.getBoolean("success");
String message = resJson.getString("message");
int code = resJson.getInt("code");
} catch (Exception exception) {
Log.e(TAG, exception.toString() );
}
finally {
m_semaphore.release(1); //释放一个信号量,放开线程
}
}
}).start();
2-2 POST请求
代码如下(示例):
public void postData(String s1,String s2) {
new Thread(new Runnable() {
@Override
public void run() {
MediaType contentType = MediaType.parse("application/json;charset=utf-8");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("usermobile",username);
jsonObject.put("markmobile",signNum);
RequestBody body = RequestBody.create(String.valueOf(jsonObject),contentType); //初始化请求体
Request request = new Request.Builder()
.url("http://http://125.125.125.125:8080/xxx")
.post(body).build(); //初始化post请求(注意与get的区别)
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute(); //初始化响应结果对象并执行请求
String result = response.body().string();
JSONObject resJson = new JSONObject(result); //解析数据
boolean success = resJson.getBoolean("success");
String message = resJson.getString("message");
int code = resJson.getInt("code");
} catch (Exception exception) {
m_semaphore1.release(1);
Log.e(TAG, exception.toString() );
}
finally {
m_semaphore.release(1); //释放一个信号量,放开线程
}
}
}).start();
}
调动请求代码如下(示例):
private final Semaphore m_semaphore = new Semaphore(0); //声明信号量
//在方法体中写入
getData();
try {
m_semaphore.acquire(1); //阻塞线程等待请求结果
} catch (InterruptedException e) {
e.printStackTrace();
}
该处使用的url网络请求的数据。
总结
比起晦涩繁杂的HttpClient来说okhttp使用起来简单明了;比起HttpURLConnection来说okhttp体积小巧,代码量少的优点。以上便是我对okhttp浅见。希望能对学习使用android的朋友们有所帮助。