第一步,引入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() 从网络加载过来的数据
运行结果: