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()
// 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加密请求
实现文件上传/下贼
传参
发送
解析