3.2.网络请求组件开发

okhttp提供的api去发送最基本的请求

模块划分

应用模块

网络请求sdk

视频播放sdk

OkHttp3的基本使用

get/post请求发送及响应

//创建一个okHttpClient对象
OkhttpClient mOkHttpClient=new OkHttpClient();
Request request=new Request.Builder()
    .url("https://www.imooc.com/")
    .build();
//new Call
Call call=mOkHttpClient.newCall(request);
//请求加入调度
call.enqueue(new Callback(){
    //请求失败
    public void onFailure(Call call,IOException e){

    }
    //请求成功
    public void onResponse(Call call,Response response){

    } 

})

存在的问题

OkhttpClient mOkHttpClient=new OkHttpClient(); //很麻烦,可省略

// 不想看到Request.Builder()

Request request=new Request.Builder() .url("https://www.imooc.com/") .build();

// newCall call.enqueue和看这烦

Call call=mOkHttpClient.newCall(request); //请求加入调度 call.enqueue

// 返回的对象还需要自己强转,不优雅

受不了以上问题,开始封装

期望达成的调用效果

同步效果

Link link = RestTemplate.postForObject(url, headers,boby,Link.class);

List list = RestTemplate.postForArray(url, headers,boby,Link.class);

异步效果

RestTemplate.post(url, headers,boby,new RestTemplateListener<Link>() {
    @Override
    public void onSuccess(Link link) {

    }
    @Override
    public void onFailure(Exception e) {

    });

代码封装

代码封装的原因

代码冗余

变更

封装部分

request:为我们创建好请求对象(请求参数)

okhttp核心:发送get/post请求,请求参数设置,https支持

callback:处理回调函数、异常处理、转发消息到UI线程、将Json转化为实体对象

封装结构

cookie

exception

https

listener

request

response

//封装所有的请求参数到HashMap中

//为我们生成request对象

public static Request createPostRequest(String url,RequestParams params){
    FormBOdy.BUidler =new FormBody.Builder();
    if (Params!=null){
        for (Map.Entry<String,String> entry:params.urlParams,entrySet()){
            mFormBodyBuild.add(entry.getKey(),entry.getValue())
        }
    }
    FormBody mFormBody=mFormBodyBuild.build();
    return new Request.Builder.url(url).post(mForomBody).build();
}

支持https加密请求

实现文件上传/下贼

传参

发送

解析

Last updated

Was this helpful?