okhttp
-
1.发起get异步请求
-
2.发起post提交请求
-
总结
一、OKHttp简介
OkHttp 是一款高效的 HTTP 客户端,内部依赖okio,它有以下优点:
-
HTTP/2 支持允许对同一主机的所有请求共享同一个socket。
-
连接池可减少请求延迟(如果 HTTP/2 不可用)。
-
透明 GZIP 可缩小下载大小。
-
响应缓存可完全避免重复请求的网络。
okhttp导入
okhttp官网地址
OkHttp 3.12.x 及以下的版本支持 Android 2.3+(API 级别 9+)和 Java 7+。同时还要导入okhttp依赖的okio库,而Okio在1.x版本是基于Java实现的,2.x则是Kotlin实现的。这里我的Android版本是2.3,基于Java实现。
在项目中的app目录下的build.gradle文件中添加以下代码
dependencies { // okhttp3的依赖
compile 'com.squareup.okhttp3:okhttp:3.8.1'
compile 'com.squareup.okio:okio:1.12.0'}
在AndroidManifest.xml中添加网络权限 :
<uses-permission android:name="android.permission.INTERNET"/>
okhttp主要功能
二、okhttp基本使用
1.发起get异步请求
布局文件很简单,只有几个按钮
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity ";
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn= (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getRequest("http://api.m.mtime.cn/PageSubArea/TrailerList.api");
}catch(IOException e)
e.printStackTrace();
get请求
url网络连接
public void getRequest(String url) throws IOException {
//要有一个客户端,类似于要有一个浏览器
OkHttpClient client = new OkHttpClient.Builder()
.build();
//创建请求内容
Request request = new Request.Builder()
.get()
.url(url)
.build();
//用client去创建请求任务
okhttp3.Call task=client.newCall(request);
//异步请求,发起请求可以继续做其他事情(同步请求,发起请求之后要等数据回来)
task.enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
Log.d(TAG,"onFailure->"+e.toString());
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
ResponseBody body=response.body();
Log.d(TAG,"onSuccess->"+body.string());
}
运行结果,点击按钮后,logcat打印出获取的内容
2.发起post提交请求
post请求和get请求不同的是post需要一个RequestBody的参数。RequestBody是一个抽象类,分别有FormBody和MultipartBody两个子类。FormBody,用于传输表单类型的参数。MultipartBody则支持多类型的参数传递。
public void post(String url){
//创建一个RequestBody对象
RequestBody body = new FormBody.Builder()
.add("date", "2018-08-13")
.build();
//先有Client
OkHttpClient client = new OkHttpClient.Builder()
.build();
//创建请求
Request request=new Request.Builder()
.url(url)
.post(body)
.build();
//创建请求任务
okhttp3.Call task=client.newCall(request);
task.enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
ResponseBody body=response.body();
Log.d(TAG,"onSuccess->"+body.string());
}
总结
get请求和post请求主要分4步:
-
首先创建一个客户端,创建一个OkHttpClient对象,OkHttpClient client = new OkHttpClient.Builder() .build();
-
其次创建请求Request对象,描述请求内容
Request request = new Request.Builder()
.get()
.url(url)
.build();
如果是post则需要一个传入一个RequestBody对象作为参数。
-
然后用创建的客户端去创建请求任务
okhttp3.Call task=client.newCall(request);
-
最后去执行该任务,具体执行可参考上述的代码。