热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于AFN封装的带缓存的网络请求

给大家分享一个基于AFN封装的网络请求git:https:github.comzhouxihiNVNetworking#带缓存机制的网络请求各类请求有分带缓存,不带缓存,可自定义,

给大家分享一个基于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 = 0,   //有缓存先返回缓存, 并同步请求
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;

 


推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
author-avatar
手机用户2402852387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有