[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7334字,纯文字阅读大概需要11分钟。
内容图文
- AFNetworking
- 是对NSURLConnection的封装
- 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单
- AFN支持ARC
1 /* * 发送 GET/POST 请求 */ 2 - (void) sendNormalRequest { 3// 1.创建请求 管理者 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 6// 2.设置参数 7 NSMutableDictionary *param = [NSMutableDictionary dictionary]; 8 param[@"user"] = @"tom"; 9 param[@"password"] = @"123"; 1011// 3.发送请求 12//// 3.1 GET请求 13// [manager GET:@"http://192.168.0.21:8080/MyTestServer/login" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { 14// NSLog(@"请求成功"); 15// NSLog(@"%@", responseObject); 16// } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 17// NSLog(@"请求失败"); 18// NSLog(@"%@", error); 19// }]; 2021// 3.2 POST请求22 [manager POST:@"http://192.168.0.21:8080/MyTestServer/login" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { 23 NSLog(@"请求成功"); 24 NSLog(@"%@", responseObject); 25 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 26 NSLog(@"请求失败"); 27 NSLog(@"%@", error); 28 }]; 29 }
1 #import <Foundation/Foundation.h> 2 3@implementation NSDictionary (Log) 4 5/** 本地化显示 */ 6 - (NSString *)descriptionWithLocale:(id)locale { 7 NSMutableString *str = [NSMutableString string]; 8 9 [str appendString:@"{\n"]; 1011// 遍历字典12 [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 13 [str appendFormat:@"\t%@ = %@,\n", key, obj]; 14 }]; 1516 [str appendString:@"}"]; 1718// 取出最后一个“,”19 NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch]; 20 [str deleteCharactersInRange:range]; 2122return str; 23} 2425@end2627@implementation NSArray (Log) 2829 - (NSString *)descriptionWithLocale:(id)locale { 30 NSMutableString *str = [NSMutableString string]; 3132 [str appendString:@"[\n"]; 3334// 遍历数组所有元素35 [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 36 [str appendFormat:@"%@, \n", obj]; 37 }]; 3839 [str appendString:@"]"]; 4041return str; 42} 4344@end
- AFHTTPRequestOperationManager 依靠设置序列化器来自动识别、解析返回的数据
- 默认使用的就是json解析,可以不用设置序列化器
- 会把json自动转换成为字典或者数组输出
1 /* * 返回json数据 */ 2 - (void) getJson { 3// 1.创建请求 管理者 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 6// 设置序列化器 7// [manager setResponseSerializer:[AFJSONResponseSerializer serializer]];//默认 8 9// 2.设置参数10 NSMutableDictionary *param = [NSMutableDictionary dictionary]; 11 param[@"type"] = @"json"; 1213// 3.发送请求14 [manager GET:@"http://192.168.0.21:8080/MyTestServer/video" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { 15 NSLog(@"请求成功"); 16 NSLog(@"返回的数据类型是:%@", [responseObject class]); 17 NSLog(@"%@", responseObject); 18 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 19 NSLog(@"请求失败"); 20 NSLog(@"%@", error); 21 }]; 22 }
2015-01-30 03:34:14.817 AFNBasicDemo[1889:192783] 返回的数据类型是:__NSCFDictionary
2015-01-30 03:34:14.818 AFNBasicDemo[1889:192783] {
videos = [
{
name = 驯龙高手1,
video = videos/1.MP4,
length = 16秒,
image = images/[20150124-180852-0].PNG
1 /* * 返回xml数据 */ 2 - (void) getXml{ 3// 1.创建请求 管理者 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 6// 设置序列化器 7 [manager setResponseSerializer:[AFXMLParserResponseSerializer serializer]]; 8 9// 2.设置参数10 NSMutableDictionary *param = [NSMutableDictionary dictionary]; 11 param[@"type"] = @"xml"; 121314// 3.发送请求15 __weak typeof(self) vc = self; 16 [manager GET:@"http://192.168.0.21:8080/MyTestServer/video" parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { 17 NSLog(@"请求成功"); 18 NSLog(@"返回的数据类型是:%@", [responseObject class]); 1920 NSXMLParser *parser = (NSXMLParser *) responseObject; 21 parser.delegate = vc; 22 [parser parse]; 23 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 24 NSLog(@"请求失败"); 25 NSLog(@"%@", error); 26 }]; 27 }
- 也是简单发送请求
- 但是没有ASI那样的监听功能
1 - (void) downloadFile { 2// 1.创建请求管理者 3 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 4 5// 设置序列化器 6 [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; // 使用二进制数据序列化 7 8// 3.发送请求 9 [manager GET:@"http://192.168.0.21:8080/MyTestServer/images/images.zip" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 1011 NSLog(@"请求成功"); 12 NSLog(@"返回的数据类型是:%@", [responseObject class]); 1314 NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 15 NSString *filePath = [cachePath stringByAppendingPathComponent:@"download.zip"]; 16 NSData *data = (NSData *) responseObject; 17 [data writeToFile:filePath atomically:YES]; 1819 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 20 NSLog(@"请求失败"); 21 NSLog(@"%@", error); 22 }]; 23 }
- 使用POST请求,带formData的post方法
- 要区分普通参数和文件参数,把文件数据放在普通参数中上传是不行的
- 文件放在block参数中赋值
1 /* * 上传文件 */ 2 - (void) uploadFile { 3// 1.创建请求管理者 4 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5 6// 2.设置参数 7 NSMutableDictionary *param = [NSMutableDictionary dictionary]; 8 param[@"user"] = @"uploader"; 910// 3.设置上传文件11 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"M2.jpg" ofType:nil]; 12 NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 1314// 4.上传文件15 __weak typeof(fileData) uploadData = fileData; 1617 [manager POST:@"http://192.168.0.21:8080/MyTestServer/upload" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 1819// 拼接文件数据20 [formData appendPartWithFileData:uploadData name:@"uploadedFile" fileName:@"my_pic.jpg" mimeType:@"image/jpg"]; 2122 } success:^(AFHTTPRequestOperation *operation, id responseObject) { 23 NSLog(@"上传成功 ---- %@", responseObject); 24 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 25 NSLog(@"上传失败 ---- %@", error); 26 }]; 27 }
1 - (IBAction)monitorNetwork:(UIButton *)sender { 2// 1.创建网络状态监控管理者 3 AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; 4 5// 2.网络状态改变事件(被动检测) 6 [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 7switch (status) { 8case AFNetworkReachabilityStatusUnknown: 9 NSLog(@"转换为未知网络"); 10break; 11case AFNetworkReachabilityStatusReachableViaWWAN: 12 NSLog(@"转换为手机网络"); 13break; 14case AFNetworkReachabilityStatusReachableViaWiFi: 15 NSLog(@"转换为WIFI网络"); 16break; 17case AFNetworkReachabilityStatusNotReachable: 18 NSLog(@"转换为没有网络"); 19break; 2021default: 22break; 23 } 24 }]; 2526// 开启监控27 [manager startMonitoring]; 2829// 主动检测30if ([manager isReachable]) { 31 NSLog(@"现在有网络"); 32 } elseif ([manager isReachableViaWiFi]) { 33 NSLog(@"现在是通过wifi上网"); 34 } elseif ([manager isReachableViaWWAN]) { 35 NSLog(@"现在是通过手机网络上网"); 36 } else { 37 NSLog(@"现在没有网络"); 38 } 39 }
原文:http://www.cnblogs.com/hellovoidworld/p/4262819.html
内容总结
以上是互联网集市为您收集整理的[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用全部内容,希望文章能够帮你解决[iOS 多线程 & 网络 - 4.0] - AFN框架简单使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。