亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[iOS多線程&網絡-4.0]-AFN框架簡單使用

2019-11-14 19:36:05
字體:
來源:轉載
供稿:網友
A.AFN基本知識
1.概念
  • AFNetworking
  • 是對NSURLConnection的封裝
  • 運行效率沒有ASI高(因為ASI基于CFNetwork),但是使用簡單
  • AFN支持ARC
 
 
B.基本請求使用
1.基本使用
(1)頭文件 AFNetworking.h
(2)管理者類:AFHTTPRequestOperationManager
(3)“GET”方法發送GET請求,使用“POST”方法發送POST請求
(4)使用字典發送參數
(5)block處理請求成功/失敗
 
 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";10    11     // 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 //    }];20    21     // 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 }
 
2.為了方便查看服務器返回的中文數據,給數組和字典增加一個分類,支持中文
 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"];10    11     // 遍歷字典12     [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {13         [str appendFormat:@"/t%@ = %@,/n", key, obj];14     }];15    16     [str appendString:@"}"];17    18     // 取出最后一個“,”19     NSRange range = [str rangeOfString:@"," options:NSBackwardsSearch];20     [str deleteCharactersInRange:range];21    22     return str;23 }24 25 @end26 27 @implementation NSArray (Log)28 29 - (NSString *)descriptionWithLocale:(id)locale {30     NSMutableString *str = [NSMutableString string];31    32     [str appendString:@"[/n"];33    34     // 遍歷數組所有元素35     [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {36         [str appendFormat:@"%@, /n", obj];37     }];38    39     [str appendString:@"]"];40    41     return str;42 }43 44 @end
 
 
3.解析返回的json數據
  • 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";12    13     // 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 }
 
output:
2015-01-30 03:34:14.817 AFNBasicDemo[1889:192783] 請求成功
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
},
...
 
 
4.解析返回的xml數據
設置使用xml序列化器,也可以自動將xml數據轉換成為字典或者數組
如果不設置xml序列化器,處理返回數據會失敗
 
 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";12    13    14     // 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]);19        20         NSXMLParser *parser = (NSXMLParser *) responseObject;21         parser.delegate = vc;22         [parser parse];23     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {24         NSLog(@"請求失敗");25         NSLog(@"%@", error);26     }];27 }
 
 
C.文件下載/上傳
1.文件下載
  • 也是簡單發送請求
  • 但是沒有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) {10        11         NSLog(@"請求成功");12         NSLog(@"返回的數據類型是:%@", [responseObject class]);13        14         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];18        19     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {20         NSLog(@"請求失敗");21         NSLog(@"%@", error);22     }];23 }
 
 
2.文件上傳
  • 使用POST請求,帶formData的post方法
  • 要區分普通參數和文件參數,把文件數據放在普通參數中上傳是不行的
  • 文件放在block參數中賦值
(1)把文件轉換成二進制數據
(2)拼接文件參數
 
 1 /** 上傳文件 */ 2 - (void) uploadFile { 3     // 1.創建請求管理者 4     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 5     6     // 2.設置參數 7     NSMutableDictionary *param = [NSMutableDictionary dictionary]; 8     param[@"user"] = @"uploader"; 9    10     // 3.設置上傳文件11     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"M2.jpg" ofType:nil];12     NSData *fileData = [NSData dataWithContentsOfFile:filePath];13    14     // 4.上傳文件15     __weak typeof(fileData) uploadData = fileData;16    17     [manager POST:@"http://192.168.0.21:8080/MyTestServer/upload" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {18        19         // 拼接文件數據20         [formData appendPartWithFileData:uploadData name:@"uploadedFile" fileName:@"my_pic.jpg" mimeType:@"image/jpg"];21        22     } success:^(AFHTTPRequestOperation *operation, id responseObject) {23         NSLog(@"上傳成功 ---- %@", responseObject);24     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {25         NSLog(@"上傳失敗 ---- %@", error);26     }];27 }
 
 
D.網絡狀態監控
AFNetworkReachabilityManager
(1)創建網絡監控管理者
(2)設置監控網絡狀態變化
(3)開啟監控
(4)也可以主動去獲取網絡狀態
 
 1 - (IBAction)monitorNetwork:(UIButton *)sender { 2     // 1.創建網絡狀態監控管理者 3     AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; 4     5     // 2.網絡狀態改變事件(被動檢測) 6     [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 7         switch (status) { 8             case AFNetworkReachabilityStatusUnknown: 9                 NSLog(@"轉換為未知網絡");10                 break;11             case AFNetworkReachabilityStatusReachableViaWWAN:12                 NSLog(@"轉換為手機網絡");13                 break;14             case AFNetworkReachabilityStatusReachableViaWiFi:15                 NSLog(@"轉換為WIFI網絡");16                 break;17             case AFNetworkReachabilityStatusNotReachable:18                 NSLog(@"轉換為沒有網絡");19                 break;20                21             default:22                 break;23         }24     }];25    26     // 開啟監控27     [manager startMonitoring];28    29     // 主動檢測30     if ([manager isReachable]) {31         NSLog(@"現在有網絡");32     } else if ([manager isReachableViaWiFi]) {33         NSLog(@"現在是通過wifi上網");34     } else if ([manager isReachableViaWWAN]) {35         NSLog(@"現在是通過手機網絡上網");36     } else {37         NSLog(@"現在沒有網絡");38     }39 }

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线| 久久综合伊人77777蜜臀| 亚洲欧美日韩网| 超碰日本道色综合久久综合| 69视频在线免费观看| 日韩视频在线免费观看| 欧美日韩福利在线观看| 亚洲理论在线a中文字幕| 国产精品96久久久久久| 日韩专区在线观看| 亚洲字幕一区二区| 日韩精品亚洲视频| 欧美日韩福利电影| 亚洲一级黄色av| 欧美成人激情视频免费观看| 欧美日韩国产中文精品字幕自在自线| 欧美亚洲在线观看| 久久久亚洲国产| 国产精品亚洲自拍| 综合激情国产一区| 韩剧1988免费观看全集| 国产成人精品视频在线观看| 亚洲精品国产精品国产自| 亚洲天堂av在线免费观看| 91久久精品国产91久久| 一区二区在线免费视频| 欧美激情女人20p| 国产91精品视频在线观看| 国内免费久久久久久久久久久| 国产成人精品久久二区二区| 国产精品久久久久aaaa九色| 91精品国产91| 日本精品免费观看| 国产成人高清激情视频在线观看| 九九视频直播综合网| 亚洲成人中文字幕| 欧美视频13p| 亚洲色图av在线| 精品国模在线视频| 欧美小视频在线| 伊人伊成久久人综合网站| 欧美日韩在线观看视频| 在线国产精品播放| 亚洲成人久久网| 伊人久久精品视频| 久久久久久网站| 一区二区在线视频| 久久精品国产2020观看福利| 亚洲成人黄色网址| 亚洲福利在线观看| 2020国产精品视频| 精品亚洲一区二区| 在线视频欧美性高潮| 亚洲精选中文字幕| 啊v视频在线一区二区三区| 国产精品自在线| 久久精品91久久香蕉加勒比| 欧美午夜性色大片在线观看| 亚洲bt欧美bt日本bt| 国内精品国产三级国产在线专| 亚洲欧美www| 黑人极品videos精品欧美裸| 国产精品免费久久久久影院| www.日韩.com| 成人av.网址在线网站| 国产精品视频网| 国产有码在线一区二区视频| 欧美激情二区三区| 亚洲精品国产欧美| 日本视频久久久| 日韩欧美在线第一页| 久久九九有精品国产23| 日韩精品一区二区视频| 欧美性视频在线| 欧美日韩亚洲高清| 日韩在线资源网| 91免费视频网站| 国产午夜精品一区二区三区| 亚洲精品wwww| 国产精品久久久久影院日本| 91精品综合久久久久久五月天| 性日韩欧美在线视频| 91久久久久久久一区二区| 欧美理论电影在线播放| 国产精品欧美久久久| 欧美疯狂性受xxxxx另类| 亚洲视频axxx| 秋霞成人午夜鲁丝一区二区三区| 亚洲天堂免费在线| 国产精品自拍偷拍| 日韩视频永久免费观看| 亚洲男人天堂九九视频| 自拍偷拍亚洲区| 国产精品影片在线观看| 久久五月天综合| 色综合亚洲精品激情狠狠| 岛国精品视频在线播放| 一区二区国产精品视频| 亚洲国产精品成人va在线观看| 欧美一级黑人aaaaaaa做受| 一本一本久久a久久精品综合小说| 亚洲视频在线免费观看| 欧美夫妻性视频| 日韩精品久久久久| 日韩一级裸体免费视频| 成人免费在线网址| 欧美电影免费观看高清| 国产精品自拍小视频| 亚洲欧洲日本专区| 91久久国产婷婷一区二区| 亚洲一区二区三区在线免费观看| 日韩成人久久久| 国产精品爱啪在线线免费观看| 亚洲国产成人精品久久| 国产精品露脸av在线| 欧美中文在线观看| 国产精品成人观看视频国产奇米| 这里只有精品在线观看| 91视频免费在线| 亚洲色图50p| 日韩有码在线播放| 91视频国产高清| 日本不卡视频在线播放| 亚洲国产欧美在线成人app| 亚洲国产精品成人精品| 国产性色av一区二区| 91国语精品自产拍在线观看性色| 亚洲精品国产精品国自产在线| 欧美猛交ⅹxxx乱大交视频| 超碰精品一区二区三区乱码| 免费不卡在线观看av| 亚洲第一精品福利| 欧美最猛性xxxx| 国产日韩精品视频| 久久久亚洲国产天美传媒修理工| 欧美精品激情blacked18| 国产日韩av在线播放| 国产美女久久精品香蕉69| 久久久99久久精品女同性| 亚洲女人天堂色在线7777| 一区二区三区无码高清视频| 国产欧美一区二区白浆黑人| 欧美午夜精品久久久久久人妖| 中文字幕一区日韩电影| 免费91麻豆精品国产自产在线观看| 国产精品999999| 国产97人人超碰caoprom| 亚洲午夜女主播在线直播| 在线观看国产精品日韩av| 欧美日韩在线观看视频| 色婷婷久久av| 国产丝袜一区二区三区免费视频| 插插插亚洲综合网| 97视频在线观看播放| 一本色道久久综合亚洲精品小说| 国产日产欧美a一级在线| 韩剧1988在线观看免费完整版| 国产精品视频内| 精品国偷自产在线视频99| 国产精品久久久久久久久免费看| 最新中文字幕亚洲| 国产精品视频大全| 色妞一区二区三区| 欧洲成人午夜免费大片|