Android开发之OkHttp3.4.x
HTTP是现代应用程序访问网络的一种方式。网络中很多请求就是使用的http方式,来访问网络的。
Android从4.4开始,HttpUrlConnection开始使用okhttp作为底层实现。实现原理如下图:
这篇博客简单说一下okhttp的使用。文字部分没有讲清楚的,可以查看代码里面的注释。首先看一下okHttp怎么工作的。
首先我们看看一个okhttp完整的网络访问,都涉及到了那几个类(这里先说核心类)。
1.OkHttpClient: Call类的工厂,Call是用来发送网络请求和接收服务器响应的类。这个类实例可以设置拦截器,缓存大小,缓存目录,连接池等信息。
2.Request:是用来创建http请求,这个请求里面可以设置请求头信息,网络访问地址,请求方式(GET,POST,DELETE,PUT)等。
3.Call:一个接口,一个准备执行的请求。
具体代码:
/***首先构建OkHttpClient,<br/>*1.方法:直接使用new关键字创建*2.方法:使用构造着模式,OkHttpClient.Builder.build方法构造。*这个类是用来配置和创建HTTP连接。在大多数的程序中,这个类可以封装成一个单利模式*来进行程序网络访问的统一管理。*设置共享的响应缓存、线程池、连接复用*(要设置这些东西,请使用官方提供的方法,OkHttpClient.Builder来设置缓存目录、缓存大小,*配置连接池,*配置拦截器,*)*然后构建Request请求对象<br/>*request对象只能使用Request.Builder.build来创建对象。*最后Call,使用httpClient.newCall(request)来生成一个执行对象。*用call对象,调用execute方法,执行网络请求**/Filefile=newFile(Environment.getDataDirectory().getAbsolutePath()+File.pathSeparator+"http_cache");finalCachecache=newCache(file,20000);//最大的闲置连接数量,ConnectionPoolpool=newConnectionPool(10,5,TimeUnit.SECONDS);//call的工厂类,Call是用来发送请求和接收响应的类OkHttpClienthttpClient=newOkHttpClient.Builder().addInterceptor(newInterceptor(){@OverridepublicResponseintercept(Chainchain)throwsIOException{//请求时的参数Responseresponse=chain.proceed(chain.request());okhttp3.MediaTypemediaType=response.body().contentType();//响应体Stringcontent=response.body().string();returnresponse.newBuilder().body(okhttp3.ResponseBody.create(mediaType,content)).build();}//这只连接池,缓存}).connectionPool(pool).cache(cache).build();//这里面来设置网络访问的头信息,以及访问的网络地址,这里默认使用get方式请求Requestrequest=newRequest.Builder().url("https://www.baidu.com").build();Callcall=httpClient.newCall(request);call.enqueue(newCallback(){@OverridepublicvoidonFailure(Callcall,IOExceptione){Log.d("--MainActivity--","onFailure:---网络访问失败");}@OverridepublicvoidonResponse(Callcall,Responseresponse)throwsIOException{//这个方法在网络访问成功之后回执行。response响应体,实例里封装了服务器返回的数据。//最常用的就是body(),服务器返回的数据(ResponseBody)。这个ResponseBody里面是服务器具体返回的数据//如果是返回的字符串则用string()方法。如果是流,则byteStream(),字节数组bytes().Log.d("--MainActivity--","onResponse:"+response.body().string());}});
这样一个完整的网络访问就完成了。
使用到得权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
注:okhttp源码:https://github.com/square/okhttp
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。