原生iOS解决方案
快速使用JDHttpToolkit
首先,初始化JDHttpToolkit
JDHttpTookit.initialize(JDHttpTookit.newBuilder(this)
.setSecretKey(xxx)
.build());
简单初始化,SecretKey为网关平台申请的应用唯一的key,申请流程请参考:网关接入文档 ; 若涉及详细功能,参考API手册
简单发送一个POST请求
// 实例化一个HttpSetting对象
HttpSetting httpSetting = new HttpSetting();
// 设置用户请求functionId
httpSetting.setFunctionId("yourFunctionId");
// 设置用户请求域名
httpSetting.setHost("yourHost");
// 设置请求回调函数
httpSetting.setListener(new HttpGroup.CustomOnAllListener(){
@Override
public void onStart() {
//TODO 请求发出去之前设置
}
@Override
public void onEnd(HttpResponse httpResponse) {
//TODO 请求返回数据处理
}
@Override
public void onError(HttpError error) {
//TODO 异常情况
}
@Override
public void onProgress(int max, int progress) {}});
// 把网络请求加入线程池
HttpGroupUtils.getHttpGroupaAsynPool().add(httpSetting);
下载一个文件
//设置本地存储选项
final FileGuider savePath = new FileGuider();
savePath.setSpace(FileService.Directory.INTERNAL);
savePath.setChildDirName(UnIconConfigConstants.ICON_DIR);
savePath.setImmutable(false);
savePath.setFileName(model.id+".png");
savePath.setMode(Context.MODE_WORLD_READABLE);
// 启动任务
final HttpSetting httpSetting = new HttpSetting();
httpSetting.setUrl(model.url);
httpSetting.setCacheMode(HttpSetting.CACHE_MODE_ONLY_NET);
httpSetting.setType(HttpGroupSetting.TYPE_FILE);
httpSetting.setSavePath(savePath);
httpSetting.setBreakpointTransmission(false);
httpSetting.setAttempts(1);
httpSetting.setListener(new HttpGroup.OnAllAndPauseListener() {
@Override
public void onEnd(HttpResponse httpResponse) {
//TODO 处理是否全部下载完毕
}
@Override
public void onError(HttpError error) {
//TODO 下载出错
}
@Override
public void onPause() {
//TODO 下载暂停
}
@Override
public void onProgress(int max, int progress) {
//TODO 下载进度
}
@Override
public void onStart() {
//TODO 下载前设置
}
});
HttpGroupUtils.getHttpGroupaAsynPool().add(httpSetting);
网络请求登录态
京东商城主站登录态(cookie信息)是通过登录模块完成登录操作,将cookie信息做了本地化保存,网络请求时需要校验用户登录态进行网络请求。
JDHttpToolkit不维护用户cookie,开发人员需要外部设置依赖接口实现,接口名称ILoginUserController,设置方法如下:
//登录依赖cookie信息
setLoginUserControllerImpl(new ILoginUserController(){
@Override
public String getCookie() {
return SafetyManager.getCookies();
}
...
})
关于网络弹框的设置
loading圈
JDHttpToolkit框架提供了loading圈展示的功能,开发人员可以根据需求使用自定制的loading圈 或者采用系统默认的loading效果。
需要定制化的默认loading圈效果设置如下接口
//JDHttpToolkit初始化过程中使用
setCustomUIComponentImpl(new ICustomUIComponent(){...})
HttpSetting使用过程中需要如下设置
//缺省或者设置如下属性
httpSetting.setEffect(HttpSetting.EFFECT_DEFAULT);
并且,不要使用CustomOnAllListener这个作为HttpSetting网络回调函数,建议采用HttpGroup.OnAllListener()类
HttpGroup获取接口需要传入Activity上下文,因为UI展示涉及到主线程操作
HttpGroupUtils.getHttpGroupaAsynPool(this);
HttpSetting支持用户制定ViewGroup作为loading圈的展示区域,注意首先是ViewGroup,其次不要采用LinearLayout,因为这样会使loading圈跟子view发生布局不兼容, 如果不指定展示区域,默认Activity的DecorView作为统一的loading展示区域,且每个Activity实例同时展示一个loading圈
httpSetting.setProgressBarRootLayout(testViewGroup);
错误弹框
JDHttpToolkit采用了系统默认的AlertDialog作为网络失败弹框,一般支持的错误弹框风格如下:
//HttpSetting类中错误框常量定义
public static final int ERROR_DIALOG_TYPE_DEFAULT = 0; // 默认为0
public static final int ERROR_DIALOG_TYPE_ONLY_CANCEL = 1; // 只有取消按钮
public static final int ERROR_DIALOG_TYPE_BACK_RETRY = 2; // 返回上一页和重试
public static final int ERROR_DIALOG_TYPE_SETUP_CANCEL = 3; // 设置网络和取消
弹框触发的条件
httpSetting.setNotifyUser(true);
且当前网络状态为连接状态
文件上传
SimpleFileUploader是基于OkHttp组件实现的,用于支持JDHttpToolkit框架支持图片、文件上传。需要注意的是,SimpleFileUploader对于多个上传请求的策略是排队上传。SimpleFileUploader的使用方法如下所示:
SimpleFileUploader.getInstance().upload(String requestUrl,String filePath,OnAllListener listener);
同时,也提供了自定义请求header和source的接口:
SimpleFileUploader.getInstance().upload(UploadRequest request, HttpGroup.OnAllListener listener);
取消上传
如果要取消一个请求,可以调用cancel方法:
SimpleFileUploader.getInstance().cancel(String requestUrl);