okhttp简单使用【学习笔记】

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

运行结果:
log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值