• 首页
  • 产品与方案
  • 众成服务
  • 走进众成
  • 新闻中心
  • 企业文化
  • 联系我们
  • 解决方案
  • 众成软件
  • 维护支持
  • 运维服务
  • 技术交流
  • 公司介绍
  • 荣誉资质
  • 合作伙伴
  • 招贤纳士
  • 公司新闻
  • 业界动态
  • 文化建设
  • 企业文化
  • 荣誉榜

首页 > 众成服务 > 技术交流

技术交流

iOS网络操作与AFNetworking

 作者:众成   文章来源:软件二部    点击数:  更新时间:2018-07-31 14:59:57

   众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来很不方便。不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题。

一、早前的几个网络框架

1、ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新.

2、MKNetworkKit (印度人写的).

3、AFN一直还在更新.

AFNetworking的出现:MAC/iOS设计的一套网络框架.(为了简化网络操作)

地址:https://github.com/AFNetworking/AFNetworking

*AFN专注与网络数据传输,以及网络中多线程的处理.

二、AFNetworking的使用

1、AFN特性 :

*登录传参数时,传递字典即可.(键名为参数名,键值为参数值).

*自动到子线程中执行,执行完后返回主线程.

*返回的结果自动序列化为NSDictionary.

2、使用AFN注意 :

*AFHTTPRequestOperationManager封装了通过HTTP协议与Web应用程序进行通讯的常用方法.(这个实例化的时候不是单例, 因为没有shared字)

*包括创建请求/响应序列化/网络监控/数据安全.

*方法等都是以AF开头的.

3、AFN能做的 (网络中的都涵盖了):

*GET/POST/PUT/DELETE/HEAD请求.

*JSON数据解析/Plist数据解析.(不支持XML数据解析)

*POSTJSON.

*上传/下载.

4、使用步骤 : (可参考说明文档)

1.首先需要实例化一个请求管理器AFHTTPRequestOperationManager.

2.设置请求的数据格式:默认是二进制.(不是可改)

*AFHTTPRequestSerializer(二进制)

*AFJSONRequestSerializer(JSON)

*AFPropertyListRequestSerializer(Plist)

3.设置响应的数据格式:默认是JSON.(不是可改)

*AFHTTPResponseSerializer(二进制)

*AFJSONResponseSerializer(JSON)

*AFPropertyListResponseSerializer(Plist)

*AFXMLParserResponseSerializer(XML)

*AFImageResponseSerializer(Image)

*AFCompoundResponseSerializer(组合的)

4.如果响应者的MIMEType不正确,就要修改acceptableContentTypes.

5.调用方法,发送响应的请求(GET/POST...).

 

1.       #pragma mark - get/post登录  

2.       - (void)getLogin {  

3.           //1.管理器  

4.           AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

5.         

6.           //2.设置登录参数  

7.           NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };  

8.         

9.           //3.请求  

10.      [manager GET:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

11.          NSLog(@"GET --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程  

12.      } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

13.          NSLog(@"%@", error);  

14.      }];  

15.  }  

16.    

17.  /** 

18.   *  和上面的GET用法完全一样, 只有一个POST参数不一样 

19.   */  

20.  - (void)postLogin {  

21.      //1.管理器  

22.      AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

23.    

24.      //2.设置登录参数  

25.      NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };  

26.    

27.      //3.请求  

28.      [manager POST:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

29.          NSLog(@"POST --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程  

30.      } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

31.          NSLog(@"%@", error);  

32.      }];  

33.  }  

AFN进行网络数据解析,获取Plist,JSON,XML(AFN不支持自动解析XML,有专门的框架去做,如SAX,PULL,KissXML等)

[objc] view plaincopy

1.       #pragma mark - get 数据解析  

2.       - (void)getJSON {  

3.           //1.请求管理器  

4.           AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

5.         

6.           //2.发起请求  

7.           [manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

8.               NSLog(@"%@", responseObject);  

9.           } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

10.          NSLog(@"%@", error);  

11.      }];  

12.  }  

13.    

14.  /** 

15.   *  不支持XML数据解析 

16.   */  

17.  - (void)getXML {  

18.      //1.管理器  

19.      AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

20.    

21.      //2.设置返回数据类型  

22.      manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下  

23.    

24.      //3.发起请求  

25.      [manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

26.          NSLog(@"%@", responseObject);  

27.      } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

28.          NSLog(@"%@", error);  

29.      }];  

30.  }  

31.    

32.  - (void)getPlist {  

33.      //1.管理器  

34.      AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

35.    

36.      //2.设置response类型  

37.      manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.  

38.      manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.  

39.    

40.      //3.请求  

41.      [manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

42.          NSLog(@"%@", responseObject);  

43.      } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

44.          NSLog(@"%@", error);  

45.      }];  

46.  }  


用AFN来POST JSON数据,上传、下载等。(上传、下载主页说明上有https://github.com/AFNetworking/AFNetworking)

[objc] view plaincopy

1.       #pragma mark - post json数据与上传文件等  

2.       - (void)postJSON {  

3.           //1.管理器  

4.           AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  

5.         

6.           //2.设定类型. (这里要设置request-response的类型)  

7.           manager.requestSerializer = [AFJSONRequestSerializer serializer];  

8.           manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //这个决定了下面responseObject返回的类型  

9.       //    manager.responseSerializer = [AFJSONResponseSerializer serializer];  

10.  //  manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];  

11.        

12.      //2.设置登录参数  

13.      NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };  

14.    

15.      //3.发送请求  

16.      [manager POST:@"http://localhost/postjson.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {  

17.  //      NSLog(@"postjson--> %@", responseObject);  //这样显示JSON的话需要设置text/plain  

18.          NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];  

19.          NSLog(@"%@",result);  

20.      } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {  

21.          NSLog(@"%@", error);  

22.      }];  

23.  }  

 

下载此文档:iOS网络操作与AFNetworking(杨宇)   类型:docx,   大小:22 KB
  • 地址:温州市车站大道大诚商厦E幢四楼 | 电话:0577-88891333 | 技术服务电话:4008515159 | 传真:0577-88363999
  • 邮箱:jucher@jucher.com | 浙ICP备05000620号-1
  • Copyright © 2009-2019 JUCHER CORPORATION CO., LTD All Rights Reserve