今天继续完善我们的网络请求框架
这一次完善post功能
依旧在我们的基础接口INetManager里新增方法
整体代码如下:
/**
* Created by lenovo on 2019/11/8.
* 网络请求工具类
*/
public interface INetManager {
/**
* @param url 请求网址
* @param callback 回调
* @param tag 请求的tag
*/
void get(String url, INetGetCallBack callback, Object tag);
/**
* post请求
*
* @param url
* @param headersParam head
* @param param 参数
* @param callback 回调
* @param tag 请求的tag
*/
void post(String url, Map<String, String> headersParam, Map<String, String> param, INetPostCallBack callback, Object tag);
/**
* 取消请求
*
* @param tag
*/
void cancel(Object tag);
}
OkhttpNetManager需要实现父类的方法
用map集合来传递参数和head
同时创建一个新的回调接口
INetPostCallBack
具体内容如下:
@Override
public void post(String url, Map<String, String> headersParams, Map<String, String> params, final INetPostCallBack callback, Object tag) {
Request.Builder builder1 = new Request.Builder().url(url);
if (headersParams != null) {//遍历head参数
for (Map.Entry<String, String> entry : headersParams.entrySet()) {
builder1 = builder1.addHeader(entry.getKey(), entry.getValue());
}
}
FormBody.Builder builder = new FormBody.Builder();
if (params != null) {//遍历参数
for (Map.Entry<String, String> entry : params.entrySet()) {
builder = builder.add(entry.getKey(), entry.getValue());
}
}
FormBody body = builder.build();
Request request = builder1.post(body).tag(tag).build();
Call call = sokHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(final Call call, final IOException e) {
if (call.isCanceled()) {
return;
}
//非ui线程
shandler.post(new Runnable() {
@Override
public void run() {
//ui线程
callback.failed(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
if (call.isCanceled()) {
return;
}
final String string = response.body().string();
//非ui线程
shandler.post(new Runnable() {
@Override
public void run() {
//ui线程
callback.success(string);
}
});
} catch (Throwable e) {
e.printStackTrace();
callback.failed(e);
}
}
});
}
INetPostCallBack接口内容也比较简单
包含两个回调方法即可
/**
* Created by lenovo on 2019/11/8.
* 回调post接口的返回结果
*/
public interface INetPostCallBack {
//成功的回调
void success(String response);
//失败的回调
void failed(Throwable throwable);
}
最后是具体的使用
和get请求的使用基本一致
不过要先创建两个map集合
然后调用以下方法
传入相应的参数即可
INetClient.getsInstance()
.getmNetManager()//得到具体网络请求实现类,这里是OkhttpNetManager
.post(具体对应参数);
到这里
基本的get和post请求以及取消操作就完成了
以后有相关的新需求,还可以继续迭代