第三单元:OkHttp

一:OkHttp的介绍

1.什么是OkHttp

OkHttp是一个高效的HTTP库:
1.支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求
2.如果SPDY不可用,则通过连接池来减少请求延时
3.无缝的支持GZIP来减少数据流量
4.缓存响应数据来减少重复的网络请求

2.OkHttp的优点

OkHttp会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。
使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块

二:OkHttp的使用

1.Get请求

 get.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OkHttpClient.Builder builder = new OkHttpClient.Builder();
                builder.readTimeout(1, TimeUnit.MINUTES);
                builder.connectTimeout(1,TimeUnit.MINUTES);
                OkHttpClient client = builder.build();

                Request.Builder builder1 = new Request.Builder();
                builder1.url(get_url);
                builder1.get();
                final Request request = builder1.build();
                Call call = client.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.i("TAG", "onFailure: "+e.getMessage());
                    }
                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        ResponseBody body = response.body();
                        String json = body.string();
                        Log.i("TAG", "onResponse: "+json);


                    }
                });

            }
        });

2.POST请求

 post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OkHttpClient client = new OkHttpClient.Builder()
                        .readTimeout(1, TimeUnit.MINUTES)
                        .callTimeout(1, TimeUnit.MINUTES)
                        .build();

                FormBody formBody = new FormBody.Builder()
                        .add("itemid", "2")
                        .add("act", "ad_app")
                        .build();
                Request request = new Request.Builder()
                        .url(post_url)
                        .post(formBody)
                        .build();

                Call call = client.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.i("TAG", "onFailure: "+e.getMessage());
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        ResponseBody body = response.body();
                        Log.i("TAG", "onResponse: "+body.string());
                    }
                });
            }
        });

3.网络下载数据

load.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OkHttpClient client = new OkHttpClient.Builder()
                        .readTimeout(1, TimeUnit.MINUTES)
                        .callTimeout(1, TimeUnit.MINUTES)
                        .build();
                Request request = new Request.Builder()
                        .url(download_url)
                        .get()
                        .build();
                Call call = client.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.i("TAG", "onFailure: ");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        ResponseBody body = response.body();
                        long l = body.contentLength();
                        Log.i("TAG", "onResponse:总大小 "+l);
                        InputStream inputStream = body.byteStream();
                        FileOutputStream fileOutputStream = new FileOutputStream("/sdcard/Movies/hz.mp4");
                        byte[] bytes = new byte[1024];
                        progressBar.setMax(100);
                        int len = 0;
                        int count= 0;
                        while((len=inputStream.read(bytes))!=-1){
                            count+=len;
                            fileOutputStream.write(bytes,0,len);
                            progressBar.setProgress(count);
                            Log.i("TAG", "onResponse:当前进度 "+count);
                        }
                    }
                });
            }
        });

4.上传数据

unload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                OkHttpClient client = new OkHttpClient.Builder()
                        .readTimeout(1, TimeUnit.MINUTES)
                        .callTimeout(1, TimeUnit.MINUTES)
                        .build();
                RequestBody requestBody = RequestBody.create(MediaType.parse("media/map4"), new File("/sdcard/Movies/hz.mp4"));
                MultipartBody body = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("file","shk.mp4",requestBody)
                        .build();
                Request request = new Request.Builder()
                        .url("http://169.254.218.199/hfs/")
                        .post(body)
                        .build();
                Call call = client.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {

                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.i("TAG", "onResponse:上传成功 ");
                    }
                });

            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值