发送http请求,原生的是使用HttpURLConnection,但一般开发首选的是开源的网络通信库,如OKHttp。OKHttp的开源地址:https://github.com/square/okhttp.
下面是OKHttp简单使用,更过详细请移步OKHttp官方网站.
① 首先,在app/build.gradle文件的dependencies{}中添加,如下依赖:
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
(3.4.1是版本号,可替换)
② 创建一个OKHttpClient实例:
OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
● 直接Get数据时:
③ 借助Builder,构建一个Request对象,在.build()之前,可连缀其他方法丰富此Request对象,如.url( " url" )等
Request request=new Request.Builder() //借助Builder构建Request对象
.url("http://10.0.2.2/get_data.xml")//指定访问的服务器地址是电脑本地
.build();//在build()之前,可连缀其他方法
● Get数据同时,还Post向服务器发送数据:
③ . ①首先,需要借助Builder构建一个RequestBody对象,将要发送个服务器的数据,连缀add()方法放在里面
RequestBody requestBody=new FormBody.Builder() //借助Builder构建Request对象
.add("Key1", value1) //连缀add添加数据
.add("Key2", value2)
.......
.build(); //在build()之前,可连缀多个add添加多个数据
③ . ②借助Builder,构建一个Request对象,在.build()之前,连缀一个post(RequestBody requestBody)即可发送数据了
Request request=new Request.Builder() //借助Builder构建Request对象
.url("http://10.0.2.2/get_data.xml")//指定访问的服务器地址是电脑本地
.post(requestBody) //连缀一个post(requesBody)即可发送数据
.build(); //在build()之前,可连缀其他方法
④ 调用OKHttpClient的newCall(Request request)创建一个Call对象,并调用Call的execute() 发送请求,并返回一个带有数据Response对象
Response response=client.newCall(request).execute();
//调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
//服务器返回的数据就在response对象里面
⑤ 服务器返回数据在Response中,调用Response的body().string()即可取出数据,连缀string()是转为字符串
String responseData=response.body().string(); //取出数据并转为字符串
实例部分代码:(使用子线程发送http请求)
showResponse(responseData),parseXMLByPull(responseData);这两个自定义的方法可忽略,只是简单的显示服务器返回的数据和解析XML
private void sendRequestWithOKHTTP() {
new Thread(new Runnable() { //新建子线程用于请求
@Override
public void run() {
try {
OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
Request request=new Request.Builder() //借助Builder构建Request对象
.url("http://10.0.2.2/get_data.xml").build();//指定访问的服务器地址是电脑本地
Response response=client.newCall(request).execute();
//调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
//服务器返回的数据就在response对象里面
String responseData=response.body().string(); //取出数据
/*将数据显示在testView上*/
showResponse(responseData);
/*调用,使用pull解析xml*/
parseXMLByPull(responseData);
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}