您的位置:首页 > 理论基础 > 计算机网络

okhttp简单使用【学习笔记】

2016-07-23 18:58 766 查看

第一步,引入jar包

android studio

compile “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即可

第四步,创建回调

此处便使用到了我们上面所实例化的OkHttpCilent

Call 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() 从网络加载过来的数据

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android okhttp