iOS第三方 - AFNetworking_2.0版 02:如何使用

AFNetworking 2.0 如何使用

1 - 准备工作

① 导入第三方 SVProgressHUD (模拟下载进度)、AFNetworking、UIKit+AFNetworking

注:MRC 环境下需要 TARGETS / Build Phases / Compile Sources,items的Compiler Flags 修改成 -fobjc-arc

② 添加类库(建议):Security.framework、MobileCoreServices.framework、SystemConfiguration.framework 

③ 随便拖几个控件,效果如下

2 - 代码示例

// - ViewController.h

 1 #import <UIKit/UIKit.h>
 2 
 3 @interface ViewController : UIViewController
 4 
 5 - (IBAction)JsonRequest01:(id)sender;
 6 - (IBAction)JsonRequest02:(id)sender;
 7 - (IBAction)PostGetDatajson:(id)sender;
 8 - (IBAction)XMLGetData:(id)sender;
 9 - (IBAction)GetImage:(id)sender;
10 
11 @property (weak, nonatomic) IBOutlet UIImageView *showImage;
12 
13 @end

// - ViewController.m

  1 #import "ViewController.h"
  2 #import "AFNetworking.h"
  3 #import "UIImageView+AFNetworking.h"
  4 #import "SVProgressHUD.h"  // 模拟下载进度
  5 @implementation ViewController
  6 
  7 - (void)viewDidLoad {
  8     
  9     [super viewDidLoad];
 10     self.view.backgroundColor = [UIColor cyanColor];
 11     
 12 }
 13 
 14 // 下载图片(异步)
 15 // AF 内部是通过队列实现且图片会有缓存,下次请求相同的链接时,系统会自动调用缓存,而不从网上请求数据
 16 - (IBAction)GetImage:(id)sender {
 17     
 18     NSString *urlString = @"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202006%2F24%2F20200624221308_jqelj.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1650530529&t=51e735c5e6c3ae8ccf2c566b36cbfa40";
 19     // AF 方法:setImageWithURL
 20     [self.showImage setImageWithURL:[NSURL URLWithString:urlString] placeholderImage:[UIImage imageNamed:@"demo.jpg"]];
 21 }
 22 
 23 // xml 解析:需要实现苹果自带的 NSXMLParserDelegate 委托方法
 24 // XML 中有一些不需要的协议格式内容,所以就不能像 json 那样解析
 25 - (IBAction)XMLGetData:(id)sender {
 26     
 27     NSString * urlString = @"http://f.apiplus.cn/cqssc-20.xml";
 28     AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
 29     manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
 30     [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
 31 
 32         NSLog(@"%@",responseObject);
 33         NSXMLParser *xmlPaeser = (NSXMLParser*)responseObject;
 34         xmlPaeser.delegate = self;
 35         [xmlPaeser parse];
 36     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 37 
 38         NSLog(@"%@",error);
 39     }];
 40 }
 41 
 42 // post 请求
 43 - (IBAction)PostGetDatajson:(id)sender {
 44     
 45     NSString *urlString = @"http://api.tudou.com/v3/gw";
 46     NSString *paramString = @"method=user.item.get&appKey=43db911a75b88c11&format=json&user=ttr2008&pageNo=1&pageSize=10";
 47     NSDictionary *paramDic = [self getParamsFromParamString:paramString];
 48 
 49     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 50     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
 51     manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
 52     [manager POST:urlString parameters :paramDic  success:^(AFHTTPRequestOperation *operation, id responseObject) {
 53 
 54         id dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
 55         NSLog(@"%@",dict);
 56 
 57     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 58 
 59         NSLog(@"错误: %@", error);
 60     }];
 61 }
 62 
 63 // Get请求:使用 AFHTTPRequestOperationManager
 64 - (IBAction)JsonRequest02:(id)sender {
 65     
 66     NSString *str = [[NSString stringWithFormat:@"http://dynamic.recommend.app.m.letv.com/android/dynamic.php?mod=mob&ctl=home55&act=index&evid=42AA25C7-5ACB-4B79-94A5-1E7B37EA3158&uid=31449873&history=20513811-2241823-20037856-20102976-20061370-20095963-20101199-2243902-20064922-2089883&pcode=010210000&version=5.5"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 67 
 68      AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
 69      // 通知 manager 只下载原始数据(不进行数据解析)
 70      // 如不写此语句则自动解析成 NCObject 数据(由于做服务器的人返回 json 数据往往不规范, AF 检查很严格,会导致 json 解析往往失败)
 71      manager.responseSerializer = [AFHTTPResponseSerializer serializer];
 72      // 请求参数
 73      NSDictionary *dict = @{@"page":@"2"};
 74      // 开始请求
 75      AFHTTPRequestOperation *operation1 = [manager GET:str parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {
 76 
 77          // 不通知 AFN 只下载原始数据的话,responseObject 返回的是原始数据;反之,是 NCObject 数据
 78          //NSLog(@"%@",responseObject);
 79 
 80          // 解析数据
 81          id dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:nil];
 82          NSLog(@"parase json is%@",dict);
 83 
 84 
 85      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 86 
 87          NSLog(@"%@",error);
 88      }];
 89 
 90      // SVProgressHUD:模拟进度条
 91      [operation1 setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
 92 
 93          CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead;// 当前已经读取的进度,需要转换
 94          [SVProgressHUD showProgress:precent maskType:SVProgressHUDMaskTypeGradient];
 95          if (precent -1.0==0) {
 96 
 97              [SVProgressHUD dismiss];
 98          }
 99      }];
100      [operation1 start];
101 }
102 
103 // Get请求:使用 AFHTTPRequestOperation
104 - (IBAction)JsonRequest01:(id)sender {
105     
106     NSString *str = [NSString stringWithFormat:@"http://dynamic.recommend.app.m.letv.com/android/dynamic.php?mod=mob&ctl=home55&act=index&evid=42AA25C7-5ACB-4B79-94A5-1E7B37EA3158&uid=31449873&history=20513811-2241823-20037856-20102976-20061370-20095963-20101199-2243902-20064922-2089883&pcode=010210000&version=5.5"];
107     NSURL *baseURL = [NSURL URLWithString:str];
108     NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];
109 
110     AFHTTPRequestOperation *operation01 = [[AFHTTPRequestOperation alloc] initWithRequest:request];
111     __weak AFHTTPRequestOperation *weakOperation01 = operation01;
112     [operation01 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
113 
114         // 数据解析
115         // 方式一:responseObject
116         id dic01 = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
117         NSLog(@"方式一 / parase json is%@",dic01);
118 
119         // 方式二:使用 operation.responseString
120         NSString *reString = operation.responseString;// 等价于 NSString *reString = weakOperation01.responseString;
121         NSData *data2 = [reString dataUsingEncoding:NSUTF8StringEncoding];
122         id dic02 = [NSJSONSerialization JSONObjectWithData:data2 options:0 error:nil];
123         NSLog(@"方式二 / parase json is%@",dic02);
124         
125         // 方式三:使用 operation.responseData
126         NSData *data3 = operation.responseData;
127         id dict03 = [NSJSONSerialization  JSONObjectWithData:data3 options:0 error:nil];
128         NSLog(@"方式三 / parase json is%@",dict03);
129 
130 
131     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
132 
133         NSLog(@"%@",error);
134     }];
135 
136     [operation01 start];
137     
138 }
139 
140 // 获取请求参数
141 - (NSDictionary *)getParamsFromParamString : (NSString *)paramString{
142 
143     NSMutableDictionary * paramDic = [NSMutableDictionary dictionaryWithCapacity:1];
144     NSArray * array = [paramString componentsSeparatedByString:@"&"];
145 
146     for (NSString * str in array) {
147 
148         NSArray * smallArray = [str componentsSeparatedByString:@"="];
149         [paramDic setObject:[smallArray lastObject] forKey:[smallArray firstObject]];
150     }
151     //NSLog(@"%@",paramDic);
152     return [NSDictionary dictionaryWithDictionary:paramDic];
153 }
154 
155 #pragma mark - <NSXMLParserDelegate>
156 // 解析起始标记
157 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
158 
159     NSLog(@"开始标记%@",elementName);
160 }
161 
162 // 解析文本节点
163 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
164 
165     NSLog(@"%@",string);
166 }
167 
168 // 解析结束标记
169 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
170 
171     NSLog(@"结束标记%@",elementName);
172 }
173 
174 // 文档结束时触发
175 -(void) parserDidEndDocument:(NSXMLParser *)parser{
176 
177     NSLog(@"解析结束!");
178 }
179 
180 // 错误发生
181 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
182 
183     NSLog(@"error = %@",parseError);
184 }
185 
186 @end

运行效果:下载图片

posted on 2018-03-22 16:06  低头捡石頭  阅读(19)  评论(0编辑  收藏  举报

导航