Android 开发 框架系列 OkHttp使用详解
程序员文章站
2022-03-09 21:05:03
...
简介
okhttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。
- 官网网址:OKHttp官网
- OkHttp github地址:https://github.com/square/okhttp
- OkHttp jar包下载: https://search.maven.org/remote_content?g=com.squareup.okhttp3&a=okhttp&v=LATEST
- 参考博客:https://blog.csdn.net/lmj623565791/article/details/47911083
Android studio工程依赖:
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
同步请求方式(get请求)
步骤一 创建请求接口网址
我使用了http://www.sosoapi.com/ 来创建了一个访问接口,用来验证OkHttp是否请求成功。如果你有兴趣了解,可以直接进入网站,里面有详细的demo演示。后续我将不在赘述这段。
我在请求响应里添加了一段JSON数据:
[
{
"name": "get测试",
"content": "你成功获取了数据"
}
]
步骤二 创建JSON解析方法
这里我写一下解析JSON数据的方法,来解析get或者post得到的JSON数据。后续我将不在赘述这段。
/**
* JSON 解析方法
* @param jsonData
* @return
*/
public String readJSONContent(String jsonData){
try {
StringBuffer sb = new StringBuffer();
JSONArray jsonArray = new JSONArray(jsonData);
for (int i=0;i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
sb.append(jsonObject.getString("name")+"\n");
sb.append(jsonObject.getString("content")+"\n");
}
return sb.toString();
} catch (JSONException e) {
Log.e("JSONException错误", "readContent: "+e.toString());
return e.toString();
}
}
步骤三 创建OkHttp 同步请求
/**
* 同步请求
*/
public void synchro(){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();//创建单例
Request request = new Request.Builder()//创建请求
.url("http://www.sosoapi.com/pass/mock/12003/test/gettest")
.build();
try {
Response response = okHttpClient.newCall(request).execute();//执行请求
mContent = response.body().string();//得到返回响应
runOnUiThread(new Runnable() {
@Override
public void run() {
mtextView.setText(readJSONContent(mContent));
}
});
} catch (IOException e) {
e.printStackTrace();
Log.e("OkHttpActivity", e.toString() );
}
}
});
thread.start();
}
效果图:
异步请求方式(get请求)
其他步骤与上面一致,这里不重复了。剩下步骤如下
创建异步请求
/**
* get异步请求
*/
public void asynchronous(){
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://www.sosoapi.com/pass/mock/12003/test/gettest")
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//失败回调
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
//响应成功,这个回调在子线程中,所以不需要创建线程
if (response.isSuccessful()){
//isSuccessful方法:如果代码位于(200…300)中,则返回true,这意味着请求已成功接收
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
//因为在子线程,所以我们需要回到主线程中更新UI数据
mtextView.setText(readJSONContent(response.body().string()));
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
});
}
Post请求
post请求也同时有同步与异步方法,与上面一致,所以这里就不展示了,下面我们来看看post请求发送
/**
* post请求
*/
public void post(){
new Thread(new Runnable() {
@Override
public void run() {
//实例
OkHttpClient okHttpClient = new OkHttpClient();
//创建post请求数据表单
RequestBody requestBody = new FormBody.Builder()
.add("name","请求post")
.add("password","123456")
.build();
//创建请求
final Request request = new Request.Builder()
.url("http://www.sosoapi.com/pass/mock/12003/test/posttest")
.post(requestBody)//添加post请求
.build();
try {
//发送请求得到响应
final Response response = okHttpClient.newCall(request).execute();
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
mtextView.setText(readJSONContent(response.body().string()));
} catch (IOException e) {
e.printStackTrace();
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
效果图:
上一篇: Android后退事件处理
推荐阅读
-
Android开发笔记之:一分钟学会使用Logcat调试程序的详解
-
Android之使用Android-query框架开发实战(二)
-
详解Android框架MVVM分析以及使用
-
android开发AIDL跨进程通信:AIDL中RemoteCallbackList的使用及权限验证方式详解
-
Android OkHttp3简介和使用详解
-
荐 Android Material Design 系列之 SearchView + Toolbar 开发详解
-
ABP(现代ASP.NET样板开发框架)系列之二、ABP入门教程详解
-
iOS开发之AssetsLibrary框架使用详解
-
Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件/多图片上传)
-
Android开发中使用Intent打开第三方应用及验证可用性的方法详解