Okhttp使用简明教程

需求

更高级的HttpUrlConnection/HttpClient

引入:

maven

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.2</version>
</dependency>

gradle

compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.14.2'

API原理:

  1. OkHttpClient负责发送Request,并返回Response:
OkHttpClient client=new OkHttpClient();
Request request=null; //建造者模式建造Request对象
Response response=client.newCall(request).execute();
  1. Request对象由建造者模式设置一系列细节:
Request request=new Request.Builder()
                .url("https://www.baidu.com")
                .header("Content-Type","application/json")
                .addHeader("role","admin")
                .addHeader("role","manager")
                .get() //这是默认项
                .build();
  1. Response的解析技术综合:
        Response response=client.newCall(request).execute();
        response.code();//状态码
        response.header("Cookie");//响应头
        response.body().bytes();//原生字节组
        response.body().byteStream();//流方式
        response.body().string();//字符串形式(原始编码)

异步

//异步调用,开子线程守护网络响应,且响应结束线程存活
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("失败.....");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                System.out.println(response.body().string());
                System.exit(0);
            }
        });
        System.out.println("结局无需等......");

发送请求体(post,put,patch)

  1. 使用RequestBody对象:
RequestBody requestBody= RequestBody.create(MediaType,[String|ByteString|byte[]|File])
  1. 具体示例(json提交):
MediaType JSON= MediaType.get("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON,"{id:1}");
Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  1. 具体示例(普通表单提交):
RequestBody formBody = new FormBody.Builder()
                .add("name", "john")
                .build();
Request request = new Request.Builder()
                .url("https://en.wikipedia.org/w/index.php")
                .post(formBody)
                .build();
  1. 具体示例(文件上传提交):
    MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
    RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("title", "Square Logo")
        .addFormDataPart("image", "logo.png",RequestBody.create(MEDIA_TYPE_PNG,new File("logo.png")))
        .build();

    Request request = new Request.Builder()
        .header("Authorization", "xxxx")
        .url("https://api.imgur.com/3/image")
        .post(requestBody)
        .build();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OkHttp使用完全教程 标签 : Http请求, 类库blog : http://blog.csdn.net/o...
    oncealong阅读 171,106评论 27 460
  • 这篇文章主要讲 Android 网络请求时所使用到的各个请求库的关系,以及 OkHttp3 的介绍。(如理解有误,...
    小庄bb阅读 4,951评论 0 4
  • 6.1 公钥密钥加密原理 6.1.1 基础知识 密钥:一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算...
    AndroidMaster阅读 9,439评论 1 8
  • 没有爱 只不过 是两个寂寞的人 相互依偎取暖罢了 又何必勉强 更进一步
    不吃糖的加菲猫阅读 2,299评论 0 1