- AFNetworking是 iOS 中使用最多的网络框架,一下是介绍它的简单使用,如果想在工程中应用 建议单独继承 AFHTTPRequestOperationManager 与 AFHTTPSessionManager,以防止以后出现停止更新而出现麻烦的解耦。
- GET:
- AFHTTPRequestOperation:
- (void)get{ AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager]; /* 第一个参数:需要请求的URL地址字符串 第二个参数:请求时需要传递的参数 第三个参数:请求成功的回调 第四个参数:请求失败的回调 */ //注意:字典参数中不需要写? AFN会自动添加 NSDictionary*dict = @{@"username":@"Mitchell", @"pwd":@"123456"}; [manager GET:@"" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { //responseObject 服务器返回数据 //注意点:如果服务器返回JSON,AFN会自动转换位OC对象 } failure:^(AFHTTPRequestOperation * operation, NSError * error) { NSLog(@"%@",error); }]; }
- AFHTTPSessionManager
NSDictionary*dict = @{@"username":@"Mitchell", @"pwd":@"123456"}; AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; [manager GET:@"" parameters:dict success:^(NSURLSessionDataTask * task, id responseObject) { } failure:^(NSURLSessionDataTask * task, NSError * error) { }];
- AFHTTPRequestOperation:
- POST:
- AFHTTPRequestOperation
AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager]; NSDictionary*dict = @{@"username":@"Mitchell", @"pwd":@"123456"}; [manager POST:@"" parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { //responseObject 服务器返回数据 //注意点:如果服务器返回JSON,AFN会自动转换位OC对象 } failure:^(AFHTTPRequestOperation * operation, NSError * error) { NSLog(@"%@",error); }];
- AFHTTPSessionManager
NSDictionary*dict = @{@"username":@"Mitchell", @"pwd":@"123456"}; AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; [manager POST:@"" parameters:dict success:^(NSURLSessionDataTask * task, id responseObject) { } failure:^(NSURLSessionDataTask * task, NSError * error) { }];
- AFHTTPRequestOperation
- 下载
//图片:http://img1.imgtn.bdimg.com/it/u=298400068,822827541&fm=21&gp=0.jpg%2F2008-09-08%2F200898163242920_2.jpg&bdtype=0&fr=ala&ala=1&alatpl=others&pos=1 //MP4:http://mvvideo1.meitudata.com/55d99e5939342913.mp4 //1、创建AFHTTPSessionManager AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; //创建NSProgress NSProgress*progress = [[NSProgress alloc]init];; self.progress = progress; // progress.completedUnitCount; // progress.totalUnitCount; //2、利用AFN下载文件 NSURLRequest*request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://mvvideo1.meitudata.com/55d99e5939342913.mp4"]]; //只要将NSProgress对象传递给AFN,AFN就会在内部自动给NSProgress赋值、会自动修改NSProgress的下载进度。 NSURLSessionDownloadTask * task = [manager downloadTaskWithRequest:request progress:&progress destination:^ NSURL * (NSURL * targerUrl, NSURLResponse * response) { NSLog(@"请求完成 "); //请求完成的回调 //targetPath:下载好的文件的路径 //response:响应头 //block的返回值:告诉AFN框架,是否需要将下载好的文件移动到其他路径下 NSString*path = [response.suggestedFilename cacheDir]; NSURL*destUrl = [NSURL fileURLWithPath:path]; return destUrl; } completionHandler:^(NSURLResponse * response, NSURL * filePath, NSError * error) { NSLog(@"下载完成"); //下载完成的回调 //filePath:移动之后的文件路径 NSLog(@"filePath = %@",filePath); }]; //给NSProgress注册监听,监听progress.completedUnitCount属性的改变 [progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil]; //3、开启任务 //注意:必须手动执行才会开始下载 [task resume]; -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if ([object isKindOfClass:[NSProgress class]]) { NSProgress*progress = (NSProgress*)object; NSLog(@"%f",1.0*progress.completedUnitCount/progress.totalUnitCount); } }
- 上传
//1、创建AFN管理者 AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; //2、利用AFN上传文件 NSDictionary*dic =@{@"username":@"username",@"pwd":@"123456"}; [manager POST:@"address" parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //在这个block 中上传文件数据 //formData就是专门用于保存需要上传文件的二进制数据的 NSData*data = [NSData dataWithContentsOfFile:@""]; //注意:该方法不能用于POST上传 // [formData appendPartWithFormData:data name:@"file"]; /* 第一个参数:需要上传的文件二进制 第二个参数:服务器对应的参数名称 第三个参数:文件的文件 第四个参数:文件的MIME类型 */ [formData appendPartWithFileData:data name:@"file" fileName:@"abc.png" mimeType:@"image/png"]; /* 第一个参数:需要上传的文件的URL 第二个参数:服务器对应的参数名称 第三个参数:文件的文件 第四个参数:文件的MIME类型 */ NSURL*url = [NSURL URLWithString:@"aaa"]; // [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.png" mimeType:@"image/png" error:nil]; //如果使用此方法上传文件,AFN会自动获取文件的名称和类型 [formData appendPartWithFileURL:url name:@"file" error:nil]; } success:^(NSURLSessionDataTask * task, id responseObject) { NSLog(@"成功的回调"); } failure:^(NSURLSessionDataTask * task, NSError * error) { NSLog(@"失败的回调"); }];
- 序列化
NSDictionary*dict = @{@"username":@"Mitchell", @"pwd":@"123456"}; AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; //如果服务器返回的不是JSON数据,那么需要提iAFN如何处理数据 //只要给AFN的responseSerializer属性赋值位AFXMLParserResponseSerializer,以后AFN就会将服务器的数据设为XML。 // manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //只要给AFN的responseSerializer属性赋值位AFHTTPResponseSerializer,以后AFN就会将服务器的数据设为二进制。 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager POST:@"" parameters:dict success:^(NSURLSessionDataTask * task, id responseObject) { //注意:AFN默认会将服务器返回的数据当做JSON处理 //如果服务器返回的是JSON数据,那么会自动转换为OC对象 NSLog(@"%@",[responseObject class]); } failure:^(NSURLSessionDataTask * task, NSError * error) { }];
- 网络监听
- (void)afNetWorkReachAbility{ AFNetworkReachabilityManager*manager = [AFNetworkReachabilityManager sharedManager]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { /* typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { AFNetworkReachabilityStatusUnknown = -1,不能识别 AFNetworkReachabilityStatusNotReachable = 0,没有网 AFNetworkReachabilityStatusReachableViaWWAN = 1,蜂窝网 AFNetworkReachabilityStatusReachableViaWiFi = 2,局域网 }; */ switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"不能识别"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"没有网"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"蜂窝网"); break; case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"wifi"); break; } }]; }
-
可选类型说明
#pragma mark ------------------ 可选类型说明 ------------------ - (void)detail{ /* nullable:代表可以为nil __nonnull:代表不能为nil */ /* AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; [manager GET:@"www.baidu.com" parameters:nil success:^nullable void(NSURLSessionDataTask * __nonnull, id __nonnull) { } failure:^nullable void(NSURLSessionDataTask * __nonnull, NSError * __nonnull) { }]; */ }
文/Mitchell(简书作者)
原文链接:http://www.jianshu.com/p/28e934d1dd64
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/28e934d1dd64
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。