AFNetWorking常用方法

一..AFNetWorking取消当前请求:

1. [[httpClient operationQueue] cancelAllOperations];  // [manager.operationQueue cancelAllOperations]; 

2. 不要创建新AFHTTPClient实例。 尝试"[self cancelAllHTTPOperationsWithMethod:@"POST" path:@"product/like"]; 

3.这里是我的get函数:

[objc]  view plain copy
  1. + (AFHTTPRequestOperation*)getJSONDataWithUrlPath:(NSString *)url_path parameters:(id)parameters success:(void (^)(id json))success fail:(void (^)())fail  
  2. {  
  3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  4.     NSString* urlStr = [NSString stringWithFormat:@"%@%@", IP_STR, url_path];  
  5.     __block AFHTTPRequestOperation* http_operation;  
  6.     AFHTTPRequestOperation* operation =  
  7.     [manager GET:urlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  8.         if (success) {  
  9.             http_operation = operation;  
  10.             success(responseObject);  
  11.         }  
  12.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  13.         NSLog(@"请求失败,错误信息:error==%@", error);  
  14.         if (fail) {  
  15.             http_operation = operation;  
  16.             fail();  
  17.         }  
  18.     }];  
  19.       
  20.     return operation;  
  21. }  

请求的时候将当前的AFHTTPRequestOperation 作为为返回值,返回给调用者保存起来,然后在任何你想要取消这一个请求的时候,调用cancel,就可以了。

[objc]  view plain copy
  1. NSDictionary* paraDic = [NSDictionary dictionaryWithObjectsAndKeys:email,@"user.email",psw, @"user.password",nil];  
  2.         self.m_currentHTTPRequestOp = [KKHttp getJSONDataWithUrlPath:@"用户登录" parameters:paraDic success:^(id json)  
  3.         {  
  4.             NSLog(@"登录成功");  
  5.         }fail:  
  6.         ^{  
  7.             NSLog(@"登录失败");  
  8.         }];  

[objc]  view plain copy
  1. //设置五秒的等待时间,超过就算请求失败,手动取消这一次请求  
  2. [NSTimer scheduledTimerWithTimeInterval:5.f target:self selector:@selector(requestTimeOut) userInfo:nil repeats:NO];  
  3.   
  4. -(void)requestTimeOut  
  5. {  
  6.     [self.m_currentHTTPRequestOp cancel];  
  7. }  
二.GET POST请求  及上传多张图片基本的使用方法:

  • 首先下载AFNetworking 然后在需要使用的类中,导入如下2个头文件: 

?
1
2
#import "AFNetworking.h"//主要用于网络请求方法
#import "UIKit+AFNetworking.h"//里面有异步加载图片的方法


  • GET请求网络数据方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-( void )obtainData
{
     // 启动系统风火轮
     [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
         
     //前面写服务器给的域名,后面拼接上需要提交的参数,假如参数是key=1 
     NSString *domainStr = @ "http://192.168.1.69/xffcol/index.php/Api/key/1/" ;
 
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
     
     //以get的形式提交,只需要将上面的请求地址给GET做参数就可以
     [manager GET:domainStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
         // 隐藏系统风火轮
         [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
         
         //json解析
         NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
 
             NSLog(@ "---获取到的json格式的字典--%@" ,resultDic);
         
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
         // 解析失败隐藏系统风火轮(可以打印error.userInfo查看错误信息)
         [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
         
     }];
}


  • POST请求网络数据方式: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-( void )obtainData
{
     // 启动系统风火轮
     [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
         
     //服务器给的域名  
     NSString *domainStr = @ "http://192.168.1.69/xffcol/index.php/Api/" ;
     
     //假如需要提交给服务器的参数是key=1,class_id=100
     //创建一个可变字典
     NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
     //往字典里面添加需要提交的参数
     [parametersDic setObject:@ "1"  forKey:@ "key" ];
     [parametersDic setObject:@ "100"  forKey:@ "class_id" ];
     
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
     
     //以post的形式提交,POST的参数就是上面的域名,parameters的参数是一个字典类型,将上面的字典作为它的参数
     [manager POST:domainStr parameters:parametersDic success:^(AFHTTPRequestOperation *operation, id responseObject) {
         // 隐藏系统风火轮
         [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
         
         //json解析
         NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
 
             NSLog(@ "---获取到的json格式的字典--%@" ,resultDic);
         
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
         // 解析失败隐藏系统风火轮(可以打印error.userInfo查看错误信息)
         [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
         
     }];
}


  • 实现上传多张图片: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-( void )uploadPictures{
     
     //域名
     NSString *domainStr = @ "http://192.168.1.69/xffcol/index.php/Api/" ;
     
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
     
     //如果还需要上传其他的参数,参考上面的POST请求,创建一个可变字典,存入需要提交的参数内容,作为parameters的参数提交
     [manager POST:domainStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
      {
      //_imageArray就是图片数组,我的_imageArray里面存的都是图片的data,下面可以直接取出来使用,如果存的是image,将image转换data的方法如下:NSData *imageData = UIImageJPEGRepresentation(image, 0.7);
          if  (_imageArray.count > 0 ){
              for ( int  i = 0;i < _imageArray.count;i ++){
                  NSData *data=_imageArray[i];
                  //上传的参数名
                  NSString *name = [NSString stringWithFormat:@ "%d" ,i];
                  //上传的filename
                  NSString *fileName = [NSString stringWithFormat:@ "%@.jpg" ,name];
                  [formData appendPartWithFileData:data
                                              name:name
                                          fileName:fileName
                                          mimeType:@ "image/jpeg" ];
              }
          }
                   
      }success:^(AFHTTPRequestOperation *operation, id responseObject)
      {
          //关闭系统风火轮
          [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
          
          //json解析
          NSDictionary * resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
          
              NSLog(@ "---resultDic--%@" ,resultDic);
              
      }
           failure:^(AFHTTPRequestOperation *operation, NSError *error) {
               // 解析失败
               [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;         
           }];
}


  • 设置网络图片的方法: 

?
1
[leftView setImageWithURL:[NSURL URLWithString:@ "http://pic25.nipic.com/20121205/5955207_182136452000_2.jpg" ] placeholderImage:@ "这里是网络图片还没加载出来的时候,显示的默认图片" ];

三.AFNetworking的总结

1、为什么要用AFNetworking


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值