okhttp简单使用【学习笔记】
2016-07-23 18:58
766 查看
第一步,引入jar包
android studiocompile “com.squareup.okhttp:okhttp:2.4.0”
eclipse
下载jar包后放入工程内 下载地址
第二步,创建okhttpclient
OkHttpClient okhttpclient = new OkHttpCilent();
直接实例化包内的OkHttpCilent即可,后面将使用到该对象
第三步,创建request并进行相关配置
Request request = new Request.Builder(). url( url ) . build();
基本参数为url地址,也可进行传输内容的设置,这里只做简单使用,因此只需给上url即可
第四步,创建回调
此处便使用到了我们上面所实例化的OkHttpCilentCall call = okhttpclient.newCall(request);
添加回调函数
call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { //请求失败时 } @Override public void onResponse(Response response) throws IOException { //接收到数据时调用,返回数据都储存在response中 Log.i("receiveContent" , response.body().string()); } });
enqueue()为异步执行
okhtpp也支持阻塞的形式,调用excute()即可
此处附上同步网络请求(excute)的方法
Response response = okhttpclient.newCall(request).excute(); //接收 if(response.issuccessful()){ //成功时 }else{ //失败时 }
到此便完成了okhttp的简单使用啦
拓展&补充
1.如何进行表单数据的传输?首先生成数据,okhttp内部提供了FormEncodingBuilder等供我们进行表单数据的生成
RequestBody sendContent = new FormEncodingBuilder(). add( "name" , "granule" ). add( "age" , 18). add( "mark" , "okhttp").build(); //然后将生成的数据添加到request中即可,url不要忘了! Request request = new Request.Builder() .url(url) .post(sendContent) .build();
之后便是进行回调函数的设置
2.请求的取消
取消请求大致分为两种方法, 第一种可直接调用
call.cancel();
第二种可以通过给request设置tag,再通过tag进行请求的取消
request.tag("tagName"); okhttpclient.cancel("tagName");
3.缓存的设置
在网络请求中,缓存技术也是获得广泛使用的技术,同样的okhttp也提供了十分方便的缓存功能
//缓存大小-10MB int cacheSize = 10 * 1024 * 1024; //获取缓存路径,需给上WRITE_EXTERNAL_STORAGE权限 File cachePath = getExternalCacheDir(); //设置缓存 okhttpclient.setCache(new cache( cachePath.getAbsoluteFile() , cacheSize);
通过以上的设置将发送的网络请求进行缓存
之后每当发送网络请求的时候,会自动检测是否已经缓存,再决定是否发送新的网络请求
这里附上完整的测试代码
public void cache(File cachePath) throws IOException{ //设置缓存大小--10MB int cacheSize = 10*1024*1024; //设置缓存 Cache cache = new Cache( cachePath , cacheSize ); okHttpClient.setCache( cache ); Request request = new Request.Builder() .url( "http://publicobject.com/helloworld.txt" ) .build(); String response1Body = "" , response2body = ""; Response response1 = okHttpClient.newCall( request ).execute(); if(response1.isSuccessful()){ response1Body = response1.body().string(); Log.i("response1" , response1+""); Log.i("response1 cache" , response1.cacheResponse()+""); Log.i("response1 network" , response1.networkResponse() +""); } Response response2 = okHttpClient.newCall( request ).execute(); if ( response2.isSuccessful() ) { response2body = response2.body().string(); Log.i("response2" , response2+""); Log.i("response2 cache" , response2.cacheResponse()+""); Log.i("response2 network" , response2.networkResponse() +""); } if(response1Body.equals( response2body )){ Log.i("response1 == response2?","true"); } }
cacheResponse() 缓存区的数据
networkResponse() 从网络加载过来的数据
运行结果:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories