okhttp 简单使用

1.header 请求头

        OkHttpClient okHttpClient = new OkHttpClient();
        final Request request = new Request.Builder()
                .url("http://c.m.163.com/nc/video/list/00850FRB/n/0-10.html")
                .header("User-Agent", "Mozilla/5.0 (Linux; X11)")
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                Log.d(TAG, "onResponse: " + response.body().string());
            }
        });

2.Form表单

    FormBody formBody = new FormBody.Builder()
                .add("username", "11")
                .add("password", "11")
                .build();

        OkHttpClient okHttpClient = new OkHttpClient();

        Request request = new Request.Builder().url("http://yun918.cn/study/public/index.php/login").post(formBody).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }

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

            }
        });

3.String字符串

      // url  字符串

        String json = "{\"page\":\"1\",\n" +
                " \"count\":\"2\",\n" +
                " \"type\":\"video\"\n" +
                " }";
        RequestBody requestBody = RequestBody.create(MediaType.parse("text/json"), json);

        OkHttpClient okHttpClient = new OkHttpClient();

        Request request = new Request.Builder()
                .post(requestBody)
                .url("https://api.apiopen.top/getJoke").build();


        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                Log.d(TAG, "onResponse: " + response.body().string());
            }
        });

4.上传流

     RequestBody requestBody = new RequestBody() {

            @Override
            public MediaType contentType() {
                return MediaType.parse("application/text");
            }

            @Override
            public void writeTo(BufferedSink sink) throws IOException {

                sink.writeUtf8("I am programer!");
            }
        };

//        requestBody

        OkHttpClient okHttpClient = new OkHttpClient();

        Request request = new Request.Builder().url("yourselft url ")
                .post(requestBody)
                .build();

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

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

            }
        });

5.上传文件

  /**
     * 上传文件
     * 文件上传接口:http://yun918.cn/study/public/file_upload.php
     * 传输类型 post
     * 参数:(String  key,String  file);
     * key    上传文件的文件夹(自己随意传)
     * file  固定的"file"参数里面放上传文件的流内容
     */
    public void testUploadFile() {
        // 1-获取上传的文件的地址
        String filePath = Environment.getExternalStorageDirectory() + File.separator + "aaa.jpg";

//        2.filepath ---》File
        File file = new File(filePath);

//        3.file--RequestBody
        RequestBody fileRequestBody = RequestBody.create(MediaType.parse("image/jpg"), file);


        //4.封装所有字段数据
        MultipartBody multipartBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)// form  表单类型
                .addFormDataPart("key", "1907A")// 会在服务端创建文件夹(名字=1907A)里保存上传的文件
                .addFormDataPart("file", file.getName(), fileRequestBody)
                .build();


        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url("http://yun918.cn/study/public/file_upload.php")
                .post(multipartBody)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: " + e.getMessage());
            }

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

            }
        });

    }

HttpURLconnection及OkHttp3的对比

1,HttpUrlConnection,google官方提供的用来访问网络,但是实现的比较简单,只支持1.0/1.1
2,没有多路复用,如果碰到app大量网络请求的时候,性能比较差,
3,HttpUrlConnection底层也是用Socket来实现的
4,OkHttp像HttpUrlConnection一样,实现了一个网络连接的过程。
5,OkHttp和HttpUrlConnection是一级的,用socket实现了网络连接,OkHttp更强大,
6,HttpUrlConnection在IO方面用到的是InputStream和OutputStream,但OkHttp用的是sink和source,这两个是在Okio这个开源库里的, feredSink(支持缓冲)、GzipSink(支持Gzip压缩)、ForwardingSink和InflaterSink(后面这两者服务于GzipSink)
7,多个相同host和port的stream可以共同使用一个socket,而RealConnection就是处理连接的,那也就是说一个RealConnection上可能有很多个Stream
8,OkHttp代码比HttpURLConnection精简的多

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值