iOS讲解迷惑--AFNetworking的使用
来源:互联网 发布:mac上的iphoto在哪儿 编辑:程序博客网 时间:2024/06/05 12:02
利用cocoaPods安装AFNetworking比较方便: http://blog.csdn.net/nlynn/article/details/49705101
创建AFN管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
默认请求二进制
默认响应是JSON
告诉AFN,支持接受 text/x
[AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet
setWithObject:@"text/xml"];
告诉AFN如何解析数据
告诉AFN客户端,将返回的数据当做JSON来处理,默认的是以JSON处理
manager.responseSerializer = [AFJSONResponseSerializer serializer];
告诉AFN客户端,将返回的数据当做XML来处理
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
告诉AFN客户端,服务器返回什么就是什么
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
1. 判断网络环境, 比如说你要播放视频的时候可以提醒用户: 您确定要使用3g网络播放视频吗, 还是切换到wifi?
#pragma mark -- 判断网络环境- (void)reach{ /* AFNetworkReachabilityStatusUnknown = -1, 未识别 AFNetworkReachabilityStatusNotReachable = 0, 未连接 AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G AFNetworkReachabilityStatusReachableViaWiFi = 2, wifi */ AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; // 提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法 [manager startMonitoring]; // 发生变化时 [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { // status 枚举值, 如上面的注释 NSLog(@"%ld", status); }];}
2. get请求
#pragma mark -- get请求- (void)getjson{// AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];// [manager GET:kActivityList parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {// NSLog(@"%@", responseObject); // 这个接口的类型是 text/html// } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {// NSLog(@"-----%@", error);// }]; NSString *string = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; NSLog(@"%@", string); NSURL *URL = [NSURL URLWithString:kActivityList]; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; [manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) { NSLog(@"JSON: %@", responseObject); /// 解析出来的model// NSDictionary *bigDic = responseObject; } failure:^(NSURLSessionTask *operation, NSError *error) { NSLog(@"Error: %@", error); }];}
3. post请求
- (void)post{ // 1.创建AFN管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.利用AFN管理者发送请求 NSDictionary *params = @{ @"date" : @"20151102", @"startRecord" : @"1", @"len" : @"30", @"udid" : @"1234567890", @"terminalType" : @"Iphone", @"cid" : @"213" }; // date=20151102&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213 [manager POST:kNewsListURL parameters:params success:^ (NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功---%@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败---%@", error); }];}
4. 文件下载
#pragma mark -- 文件下载// 执行下载文件的方法,可以监控下载进度- (void)downLoadMonitor{ // 1.创建网络管理者 // AFHTTPSessionManager 基于NSURLSession AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; // 2.利用网络管理者下载数据 // 视频的网址 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kImageURL]]; /* destination - targetPath: 系统给我们自动写入的文件路径 - block的返回值, 要求返回一个URL, 返回的这个URL就是剪切的位置的路径 completionHandler - url :destination返回的URL == block的返回的路径 */ /* @property int64_t totalUnitCount; 需要下载文件的总大小 @property int64_t completedUnitCount; 当前已经下载的大小 */ NSProgress *progress = nil; NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { // 缓存文件,如果想将缓存文件存到磁盘 SDURLCache NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename]; NSLog(@"%@", path); return [NSURL fileURLWithPath:path]; } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { NSLog(@"%@",filePath.absoluteString); }]; /* 要跟踪进度,需要使用 NSProgress,是在 iOS 7.0 推出的,专门用来跟踪进度的类! NSProgress只是一个对象!如何跟踪进度!-> KVO 对属性变化的监听! @property int64_t totalUnitCount; 总单位数 @property int64_t completedUnitCount; 完成单位数 */ // 给Progress添加监听 KVO [progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil]; // 启动任务 [downTask resume]; }- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{ NSLog(@"%@", change); }
5、 文件上传
#pragma mark -- 文件上传- (void)upload{ // 1.创建网络管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // 2.利用网络管理者上传数据 NSDictionary *dict = @{@"username":@"Syl"}; // formData: 专门用于拼接需要上传的数据 [manager POST:@"http://120.25.226.186:32812/upload" parameters:dictconstructingBodyWithBlock: ^void(id<AFMultipartFormData> formData) { /* Data: 需要上传的数据 name: 服务器参数的名称 fileName: 文件名称 mimeType: 文件的类型 */ UIImage *image =[UIImage imageNamed:@"hetu"]; NSData *data = UIImagePNGRepresentation(image); [formData appendPartWithFileData:data name:@"file" fileName:@"hetu.png" mimeType:@"image/png"]; /* NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/ CertificateSigningRequest.certSigningRequest"]; // 任意的二进制数据MIMEType application/octet-stream // [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.cer" mimeType:@"application/octet-stream" error:nil]; [formData appendPartWithFileURL:url name:@"file" error:nil]; */ } success:^void(NSURLSessionDataTask * task, id responseObject) { // 请求成功 NSLog(@"请求成功 %@", responseObject); } failure:^void(NSURLSessionDataTask * task, NSError * error) { // 请求失败 NSLog(@"请求失败 %@", error); }]; }
0 0
- iOS讲解迷惑--AFNetworking的使用
- iOS讲解迷惑--Swift中函数的使用
- iOS讲解迷惑--LeanCloud
- iOS AFNetworking的使用
- iOS AFNetworking 的使用
- iOS-AFNetWorking的使用
- iOS讲解迷惑 -- CocoaPods使用步骤(已有Ruby环境):
- iOS讲解迷惑--生成uuid
- iOS讲解迷惑--MD5加密
- iOS讲解迷惑深入浅出之单例类的两种写法
- iOS讲解迷惑深入浅出之复杂对象的归档
- iOS讲解迷惑--Swift的分支结构和循环
- ios中AFNetworking的使用
- <iOS>AFNetworking 3.0的使用
- iOS AFNetworking 3.0 的使用
- iOS开发AFNetworking的使用
- iOS开发AFNetworking的使用
- ios讲解迷惑深入浅出之GCD
- git pull wrong branch cause merge error
- i.mx257的gpio简要理解
- 【线性表】静态链表
- PHP 下nginx 配置
- word2007粘贴文本出现乱码问题
- iOS讲解迷惑--AFNetworking的使用
- android的线程(转载)
- Tcl编写循环执行某个任务的脚本
- Windows 7 安装 Enthought Canopy 1.4
- 字典设计
- lightoj Answering Queries 1369 (数学转换&&技巧)
- (转)mongodb 解决 couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 错误
- Activity生命周期
- iOS:KVO的概述与使用