基于AFN封装的带缓存的网络请求
给大家分享一个基于AFN封装的网络请求
git: https://github.com/zhouxihi/NVNetworking
#带缓存机制的网络请求
各类请求有分带缓存 , 不带缓存, 可自定义, 默认请求头和解析头等几种方式
#没有缓存机制的网络请求库
##初始化
//测试初始化
_nvNetworking = [NVNetworking shareInstance]; //测试设置beseUrl
[_nvNetworking setBaseUrl:@"http://xdf-new-test.novasoftware.cn/api"]; //测试设置需要授权
[_nvNetworking setAuthorizationRequired:true]; //检测网络监听
[_nvNetworking startMonitorNetworkWithBlock:^(NVNetworkStatus status) { NSLog(@"status: %lu", status);
}];
##默认请求样式
//使用默认请求样式:
[_nvNetworking get:@"/open/ads" parameters:nil progress:^(NSProgress *downloadProgress) {
NSLog(@"进度: %f", downloadProgress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) {
if (result.success) {
NSLog(@"%@", result.data);
}
NSLog(@"请求结束后网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);
}];
NSLog(@"请求结束前网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);
##取消所有任务
[_nvNetworking cancelAllTask];
##取消特定api的请求
[_nvNetworking cancelTaskWithApi:@"open/ads"];
##带任务返回的请求Get/Post
NVNetworking *manager = [NVNetworking shareInstance];
_task = [manager nv_get:@"/pushMessage/GetpushMessages?phonenumber=18502329837" parameters:nil progress:nil callback:^(ApiResult *result, id responseObject) { if (result.success) { NSLog(@"回调: %@", result.data);
NSDictionary *dict = [result.data mj_keyValues];
NSLog(@"dict: %@", dict);
} else { NSLog(@"失败回调: %@", responseObject);
NSLog(@"失败code: %i", result.error.code);
}
}];
##取消任务
[_task cancel];
##自定义请求样式
AFHTTPRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer];
AFHTTPResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializer]; [_nvNetworking get:@"/open/ads" parameters:nil requestSerializer:requestSerializer responseSerializer:responseSerializer header:nil progress:^(NSProgress *downloadProgress) { NSLog(@"%f", downloadProgress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) { NSLog(@"请求结束后网络请求个数: %lu", (unsigned long)[[_nvNetworking getAllTask] count]);
if (result.success) { NSLog(@"%@", result.data);
}
}];
##网络监听
[_nvNetworking startMonitorNetworkWithBlock:^(NVNetworkStatus status) {
switch (status) {
case k3GNetwork:
NSLog(@"3G网");
break;
case kWiFiNetwork:
NSLog(@"wifi");
break;
case kNoNetwork:
NSLog(@"没有网");
break;
default:
break;
}
}];
##单个文件上传
UploadParam *uploadParam = [[UploadParam alloc] init];
uploadParam.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam.name = @"1.png";
uploadParam.fileName = @"1.png";
uploadParam.mimeType = @"image/png"; NVNetworking *manager = [NVNetworking shareInstance];
[manager upload:@"/file/upload" parameters:nil uploadParam:uploadParam progress:^(NSProgress *progress) { NSLog(@"上传进度: %f", progress.fractionCompleted);
} callback:^(ApiResult *result, id responseObject) { NSLog(@"结果: %@", responseObject); if (result.success) { NSLog(@"回调: %@", result.data);
NSDictionary *dict = [result.data mj_keyValues];
NSLog(@"dict: %@", dict);
} else { NSLog(@"失败回调: %@", responseObject);
NSLog(@"失败code: %i", result.error.code);
}
}];
##取消上传任务可以用
NVNetworking *manager = [NVNetworking shareInstance];
[manager cancelTaskWithApi:@"/file/upload"];
##多任务上传
UploadParam *uploadParam = [[UploadParam alloc] init];
uploadParam.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam.name = @"1.png";
uploadParam.fileName = @"1.png";
uploadParam.mimeType = @"image/png"; UploadParam *uploadParam1 = [[UploadParam alloc] init];
uploadParam1.data = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
uploadParam1.name = @"1.png";
uploadParam1.fileName = @"1.png";
uploadParam1.mimeType = @"image/png"; NSArray *array = @[uploadParam, uploadParam1];
NVNetworking *manager = [NVNetworking shareInstance]; [manager upload:@"/file/upload" parameters:nil uploadParams:array progress:^(NSProgress *progress, NSInteger completeCount, NSInteger totalCount, NSInteger failCount, BOOL taskCompleted) { NSLog(@"progress: %f, completeCount: %li, totalCount: %li, failCount: %li, taskCompleted: %@", progress.fractionCompleted, (long)completeCount, (long)totalCount, (long)failCount, taskCompleted ? @"YES": @"NO");
} callback:^(NSInteger completeCount, NSInteger totalCount, NSInteger failCount, BOOL taskCompleted) { NSLog(@"completeCount: %li, totalCount: %li, failCount: %li, taskCompleted: %@", (long)completeCount, (long)totalCount, (long)failCount, taskCompleted ? @"YES": @"NO"); }];
##取消多任务上传
NVNetworking *manager = [NVNetworking shareInstance];
[manager cancelUploadFile];
##缓存策略有以下几种
kReturnCacheDataThenLoad = , //有缓存先返回缓存, 并同步请求
kReloadIgnoringLocalCacheData, //忽略缓存, 直接请求
kReturnCacheDataElseLoad, //有缓存就返回缓存, 没有缓存再请求
kReturnCacheDataNotLoad //有缓存就返回缓存, 没有缓存也不请求
##带缓存策略 get请求
/**
带进度回调 缓存策略的 normal get请求 @param api api
@param parameters object参数
@param cachePolicy 缓存策略
@param progresss 进度回调
@param callback 回调方法
*/
- (void)get:(NSString *)api
parameters:(id)parameters
cachePolicy:(NVCachePolicy)cachePolicy
progress:(ProgressCallback)progresss
callback:(NetworkCallback)callback;
##带缓存策略 任务返回的 get请求
/**
/**
带任务返回 进度回调 缓存策略的 get请求 @param api api
@param parameters object参数
@param cachePolicy 缓存策略
@param progresss 进度回调
@param callback 回调方法
@return 本次请求的task
*/
- (NSURLSessionTask *)nv_get:(NSString *)api
parameters:(id)parameters
cachePolicy:(NVCachePolicy)cachePolicy
progress:(ProgressCallback)progresss
callback:(NetworkCallback)callback;
##带缓存策略的 自定义get请求
/**
带进度回调的 自定义 带缓存策略的 get请求 @param api api
@param parameters object参数
@param requestSerializer 请求样式
@param responseSerializer 响应样式
@param header 请求头数据(字典)
@param cachePolicy 缓存策略
@param progresss 进度回调
@param callback 回调方法
*/
- (void)get:(NSString *)api
parameters:(id)parameters
requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
responseSerializer:(AFHTTPResponseSerializer *)responseSerializer
header:(NSDictionary *)header
cachePolicy:(NVCachePolicy)cachePolicy
progress:(ProgressCallback)progresss
callback:(NetworkCallback)callback;
##带任务返回 缓存策略的 自定义get请求
/**
带任务返回 进度回调 缓存策略的 自定义 get请求 @param api api
@param parameters object参数
@param requestSerializer 请求样式
@param responseSerializer 响应样式
@param header 请求头数据(字典)
@param cachePolicy 缓存策略
@param progresss 进度回调
@param callback 回调方法
@return 本次请求的task
*/
- (NSURLSessionTask *)nv_get:(NSString *)api
parameters:(id)parameters
requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
responseSerializer:(AFHTTPResponseSerializer *)responseSerializer
header:(NSDictionary *)header
cachePolicy:(NVCachePolicy)cachePolicy
progress:(ProgressCallback)progresss
callback:(NetworkCallback)callback;
基于AFN封装的带缓存的网络请求的更多相关文章
- 基于RxJava2+Retrofit2简单易用的网络请求实现
代码地址如下:http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装 ...
- BLOCK封装带菊花的网络请求
#import <Foundation/Foundation.h> @class HttpRequestManager; typedef void(^httpRequestBlock) ( ...
- 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」
转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...
- 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比
网络请求框架总结1.xutils 此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...
- 第六十二篇、AFN3.0封装网络请求框架,支持缓存
1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- iOS开发--基于AFNetWorking3.0的图片缓存分析
图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...
- Delphi中带缓存的数据更新技术
一. 概念 在网络环境下,数据库应用程序是c/s或者是多层结构的模式.在这种环境下,数据库应用程序的开发应当尽可能考虑减少网络数据传输量,并且尽量提高并发度.基于这个目的,带缓存的数据更新技术应运而生 ...
- 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了
在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...
随机推荐
- angular.js封装的树形指令
html ul.tree-show sub-transclude-set ng-transclude li.parent(ng-repeat='(key,item) in treeData',ng-i ...
- SQL优化一
1.行列转换: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值); select decode(sign(变量1-变量2),-1,变量1,变量2) from dual ...
- 使用r.js优化静态资源
r.js主要功能:优化项目的静态资源.可以简化压缩代码,减少体积.指定模块将多个组件合并为一个文件,减少HTTP请求数量.具体使用步骤如下: 先把 r.js 文件放到项目根目录,再于项目根目录内新建一 ...
- h5分享页面打开APP
项目中 直播app分享出来的直播h5页面 点击进入按钮:已下载app 就进入app,未下载跳转到下载页面 判断是安卓还是ios var u = navigator.userAgent; var isA ...
- TCP/UDP客户端
Python 网络编程----模块socekt 在渗透测试的过程中,经常会遇到需要创建一个TCP客户端来连接服务器.发送垃圾数据.进行模糊测试活进行其他任务的情况. 简单的TCP客户端代码: #!/u ...
- Python列表(一)
列表由一系列特定顺序排列的元素组成,在python中使用[]来表示列表,并用,来进行元素分割. >>> name_list['alben', 'james', 'harden', ' ...
- 测试工具——JMeter
本学期新学的课程,软件测试,上机的实验用到了C++Test,QTP,还有JMeter.今天针对JMeter做一次总结,方便以后用到,知道步骤会更加方便. 首先,对Jmeter进行一个大致的了解,包括对 ...
- javascript常见面试题
闭包相关面试题:1. var a=0,b=0; function A(a){ A=function(b){console.log(a+b++);}; console.log(a); } A(1); A ...
- hdu4081
hdu4081 题意 给出n个点坐标,每个点有权值,要求得到一颗生成树,且其中有一条道路修建不需要花费,但是要求这条道路所连接的两点的权值之和除以剩下所有道路的距离花费最大. 分析 首先求最小生成树, ...
- Android Apk的反编译和加密
这几天在上海出差,忙里偷闲学习了一下Apk的反编译工具的基本使用.下面就简单介绍一下如何将我们从网上下载的Apk文件进行反编译得到我们想要获得的资源文件和源码. Android的应用程序APK文件说到 ...