AFN使用讲解

在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN

    AFNetworing的使用

    

1、AFN特性 :
*登录传参数时,传递字典即可.(键名为参数名,键值为参数值).
*自动到子线程中执行,执行完后返回主线程.
*返回的结果自动序列化为NSDictionary.
2、使用AFN注意 :
*AFHTTPRequestOperationManager封装了通过HTTP协议与Web应用程序进行通讯的常用方法.(这个实例化的时候不是单例, 因为没有shared字)
*包括创建请求/响应序列化/网络监控/数据安全.
*方法等都是以AF开头的.

3、AFN能做的 (网络中的都涵盖了):
*GET/POST/PUT/DELETE/HEAD请求.
*JSON数据解析/Plist数据解析.(不支持XML数据解析)
*POSTJSON.
*上传/下载.

数据请求:
[objc]  view plain copy
  1. - (void)getJSON {    
  2.     //1.请求管理器    
  3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];    
  4.       
  5.     //2.发起请求    
  6.     [manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    
  7.         NSLog(@"%@", responseObject);    
  8.     } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    
  9.         NSLog(@"%@", error);    
  10.     }];    
  11. }    
  12.     
  13. /**  
  14.  *  不支持XML数据解析  
  15.  */    
  16. - (void)getXML {    
  17.     //1.管理器    
  18.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];    
  19.     
  20.     //2.设置返回数据类型    
  21.     manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下    
  22.     
  23.     //3.发起请求    
  24.     [manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    
  25.         NSLog(@"%@", responseObject);    
  26.     } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    
  27.         NSLog(@"%@", error);    
  28.     }];    
  29. }    
  30.     
  31. - (void)getPlist {    
  32.     //1.管理器    
  33.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];    
  34.     
  35.     //2.设置response类型    
  36.     manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.    
  37.     manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.    
  38.     
  39.     //3.请求    
  40.     [manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    
  41.         NSLog(@"%@", responseObject);    
  42.     } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    
  43.         NSLog(@"%@", error);    
  44.     }];    
  45. }    



AFN上传
[objc]  view plain copy
  1. - (void)uploadImageWithImage:(NSString *)imagePath  
  2. {  
  3.     //上传其他所需参数  
  4.     NSString *userId=XXXXXXXXXXX;  
  5.     NSString *token=XXXXXXXXXXX;  
  6.      
  7.     //上传请求POST  
  8.     AFHTTPClient *client=[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@""]];  
  9.   
  10.     NSString *urlString=[NSString stringWithFormat:@"上传服务器地址]; 
  11.     NSDictionary *dic=[[NSDictionary alloc] initWithObjectsAndKeys:userId,@"XXXXXX",token,@"XXXXXX",nil];  
  12.      
  13.     NSURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:urlString parameters:dicconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  
  14.           
  15.         //得到需要上传的数据  
  16.         NSData *data=[NSData dataWithContentsOfFile:imagePath];  
  17.           
  18.         
  19.         //上传时使用当前的系统事件作为文件名  
  20.         NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
  21.         formatter.dateFormat = @"yyyyMMddHHmmss";  
  22.         NSString *str = [formatter stringFromDate:[NSDate date]];  
  23.         NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];  
  24.           
  25.           
  26.         /* 
  27.          此方法参数 
  28.          1. 要上传的[二进制数据] 
  29.          2. 对应网站上[upload.php中]处理文件的[字段"file"] 
  30.          3. 要保存在服务器上的[文件名] 
  31.          4. 上传文件的[mimeType] 
  32.          */  
  33.   
  34. //服务器上传文件的字段和类型  
  35.         [formData appendPartWithFileData:data name:@"XXXXX" fileName:fileNamemimeType:@"image/jpg/file"];  
  36.     }];  
  37.      
  38.     // 3. operation包装的urlconnetion  
  39.     AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];  
  40.      
  41.     [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {  
  42.         NSLog(@"上传完成");  
  43.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  44.         NSLog(@"上传失败->%@", error);  
  45.     }];  
  46.      
  47.     //执行  
  48.     [client.operationQueue addOperation:op];  
  49. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值