Android网络请求框架使用 -- OkHttp
程序员文章站
2022-05-14 10:03:16
...
一、在build.gradle中引入OkHttp依赖
那么我们怎么引入呢,相信对于Android的新手来说可能不知道如何找到依赖包的正确版本。分享一下我是如何正确的找到版本并引入的。
1、打开Github,在输入框中输入OkHttp然后回车,点开第一个。在后面的使用介绍当中就可以看到gradle的正确版本了,如果以后有使用其他的开源框架也可以使用同样的方式查看正确的版本。
二、在代码中如何使用OkHttp进行网络请求
1、首先Android要进行网络请求,那么肯定需要添加网络请求权限。
<!--网络请求权限-->
<uses-permission android:name="android.permission.INTERNET"/>
2、在代码中如何请求API
网络请求常用的请求方式,Get和Post两总请求方式,两个请求方式有什么区别这里就不赘述了。
①、 Get请求
public void okHttpGetRequest(){
//1、拿到OKHttpClient对象
OkHttpClient client = new OkHttpClient();
//2、构造Request
final Request request = new Request.Builder().url(NetworkRequestUrl.HOMEPAGE_URL+"titleNewApi.jsp?maxid=0&format=xml&type=android").build();
//3、将Requsest封装成Call对象
okhttp3.Call call = client.newCall(request);
//4、执行Call
call.enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
DebugLogUtil.e(e.getMessage());
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
String string = response.body().string();
DebugLogUtil.e("服务器返回XML数据:"+string);
}
});
}
②、Post请求
public void okHttpPostRequest(){
//1、拿到OKHttpClient对象
OkHttpClient client = new OkHttpClient();
//Post请求
FormBody.Builder fb = new FormBody.Builder();
fb.add("maxid","0");
fb.add("format","xml");
fb.add("type","android");
final Request request = new Request.Builder().url(NetworkRequestUrl.HOMEPAGE_URL+"titleNewApi.jsp?").post(fb.build()).build();
okhttp3.Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
//获取body中的数据
InputStream inputStream = response.body().byteStream();
}
});
}
可以看到两个请求方式很相似,但是还是有些许不同。了解Get和Post两种请求方式的就应该知道,Get请求入参都是拼接在URL后面,也就是请求头当中。Post请求则是将入参封装在请求体当中,所以可以看到OkHttp Get请求和Post请求当中最大的区别就是Get请求的入参是拼接在URL后面,Post则是使用FormBody.Builder 对数据进行了封装。请求完成之后,会有两个接口回掉方法失败和响应。请求成功之后可以在response中获取获取响应体中的数据,数据可以以多种类型返回,这个就看你自己具体需求。
③ 更新UI
需要注意的是,不能直接在onResponse中更新UI。因为这里是子线程,我们需要在UI线程中更新UI,这里有两种方式。runOnUiThread 和 Handle,如果不知道如何使用,自行百度一下,很简单。