AFNetworking 二次封装


  1. @interface BJAppClient AFHTTPSessionManager  
  2.   
  3. (instancetype)sharedClient;  
  4.   
  5. @end  

[objc] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. static NSString const APIBaseURLString @"xxxxx";  
  2.   
  3. @implementation BJAppClient  
  4.   
  5. (instancetype)sharedClient  
  6.  
  7.     static BJAppClient *_sharedClient nil;  
  8.     static dispatch_once_t onceToken;  
  9.     dispatch_once(&onceToken, ^{  
  10.   
  11.         _sharedClient [[BJAppClient alloc] initWithBaseURL:[NSURL URLWithString:APIBaseURLString]];    
  12.           
  13.     });  
  14.       
  15.     return _sharedClient;  
  16.  
  17.   
  18. #pragma mark 重写initWithBaseURL  
  19.   
  20.   
  21. -(instancetype)initWithBaseURL:(NSURL *)url  
  22.  
  23.     if (self [super initWithBaseURL:url])  
  24.           
  25.         self.requestSerializer.timeoutInterval 3;  
  26.           
  27.         self.requestSerializer.cachePolicy NSURLRequestReloadIgnoringLocalCacheData;  
  28.           
  29.         self.requestSerializer [AFHTTPRequestSerializer serializer];  
  30.         AFJSONResponseSerializer response [AFJSONResponseSerializer serializer];  
  31.         response.removesKeysWithNullValueYES;  
  32.         self.responseSerializer response;  
  33.           
  34.   
  35.           
  36.         [self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];  
  37.           
  38.           
  39.         [self.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/json",@"text/javascript",@"text/html", nil nil]];  
  40.           
  41.      
  42.       
  43.     return self;  
  44.  


[objc] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef NS_ENUM(NSUInteger,HTTPSRequestType)  
  2.  
  3.     HTTPSRequestTypeGet 0,  
  4.     HTTPSRequestTypePost  
  5. };  
  6.   
  7. typedef void(^completeBlock)( NSDictionary *_Nullable object,NSError _Nullable error);  
  8.   
  9. @interface BJHTTPSession NSObject  
  10.   
  11. (nullable NSURLSessionDataTask *)GET:(nonnull NSString *)urlString  
  12.                              paraments:(nullable id)paraments  
  13.                          completeBlock:(nullable completeBlock)completeBlock;  
  14.   
  15. (nullable NSURLSessionDataTask *)POST:(nonnull NSString *)urlString  
  16.                               paraments:(nullable id)paraments  
  17.                           completeBlock:(nullable completeBlock)completeBlock;  
  18.   
  19. (nullable NSURLSessionDataTask *)requestWithRequestType:(HTTPSRequestType)type  
  20.                                                 urlString:(nonnull NSString *)urlString  
  21.                                                 paraments:(nullable id)paraments  
  22.                                             completeBlock:(nullable completeBlock)completeBlock;  
  23.   
  24. (void)AFNetworkStatus;  
  25.   
  26.   
  27.   
  28.   
  29. @end  


[objc] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  BJHTTPSession.m  
  3. //  VRMax  
  4. //  
  5. //  Created by VRGATE on 16/5/12.  
  6. //  Copyright © 2016年 AngieMita. All rights reserved.  
  7. //  
  8.   
  9. #import "BJHTTPSession.h"  
  10. #import "BJAppClient.h"  
  11. #import   
  12. #import   
  13. #import   
  14. #import "UIImage+compressIMG.h"  
  15.   
  16. @implementation BJHTTPSession  
  17.   
  18. (nullable NSURLSessionDataTask *)GET:(nonnull NSString *)urlString  
  19.                              paraments:(nullable id)paraments  
  20.                          completeBlock:(nullable completeBlock)completeBlock  
  21.  
  22.     return [[BJAppClient sharedClient] GET:urlString  
  23.                                 parameters:paraments  
  24.                                   progress:^(NSProgress _Nonnull downloadProgress)  
  25.                                   success:^(NSURLSessionDataTask _Nonnull task, id  _Nullable responseObject)  
  26.                                       completeBlock(responseObject,nil);  
  27.                                   failure:^(NSURLSessionDataTask _Nullable task, NSError _Nonnull error)  
  28.                                       completeBlock(nil,error);  
  29.                                   }];  
  30.  
  31.   
  32. (nullable NSURLSessionDataTask *)POST:(nonnull NSString *)urlString  
  33.                               paraments:(nullable id)paraments  
  34.                           completeBlock:(nullable completeBlock)completeBlock  
  35.  
  36.     // 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误  
  37.   
  38.     [BJAppClient sharedClient].requestSerializer [AFJSONRequestSerializer serializer];//请求  
  39.     [BJAppClient sharedClient].responseSerializer [AFHTTPResponseSerializer serializer];//响应  
  40.       
  41.     // post请求  
  42.     return [[BJAppClient sharedClient] POST:urlString  
  43.                                  parameters:paraments  
  44.                   constructingBodyWithBlock:^(id  _Nonnull formData)  
  45.                       // 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。  
  46.                   progress:^(NSProgress _Nonnull uploadProgress){  
  47.                   success:^(NSURLSessionDataTask _Nonnull task, id  _Nullable responseObject)  
  48.                       NSLog(@"%@", responseObject);  
  49.                       NSDictionary *dict [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];  
  50.                       NSLog(@"dict start ----\n%@   \n ---- end  -- ", dict);  
  51.                       // 请求成功,解析数据  
  52.                       completeBlock(responseObject,nil);  
  53.                   failure:^(NSURLSessionDataTask _Nullable task, NSError _Nonnull error)  
  54.                       NSLog(@"%@", [error localizedDescription]);  
  55.                       // 请求失败  
  56.                       completeBlock(nil,error);  
  57.                   }];  
  58.  
  59.   
  60. #pragma mark 简化  
  61. (nullable NSURLSessionDataTask *)requestWithRequestType:(HTTPSRequestType)type  
  62.                                                 urlString:(nonnull NSString *)urlString  
  63.                                                 paraments:(nullable id)paraments  
  64.                                             completeBlock:(nullable completeBlock)completeBlock  
  65.  
  66.     switch (type)  
  67.         case HTTPSRequestTypeGet:  
  68.          
  69.             return  [BJHTTPSession GET:urlString  
  70.                              paraments:paraments  
  71.                          completeBlock:^(NSDictionary _Nullable object, NSError _Nullable error)  
  72.                              completeBlock(object,error);  
  73.                          }];  
  74.          
  75.         case HTTPSRequestTypePost:  
  76.             return [BJHTTPSession POST:urlString  
  77.                              paraments:paraments  
  78.                          completeBlock:^(NSDictionary _Nullable object, NSError _Nullable error)  
  79.                              completeBlock(object,error);  
  80.                          }];  
  81.      
  82.       
  83.  
  84.   
  85. #pragma mark  取消所有的网络请求  
  86.   
  87.   
  88.   
  89. +(void)cancelAllRequest  
  90.  
  91.     [[BJAppClient sharedClient].operationQueue cancelAllOperations];  
  92.  
  93.   
  94.   
  95.   
  96. #pragma mark   取消指定的url请求/  
  97.   
  98.   
  99. +(void)cancelHttpRequestWithRequestType:(NSString *)requestType  
  100.                        requestUrlString:(NSString *)string  
  101.  
  102.     NSError error;  
  103.       
  104.     NSString urlToPeCanced [[[[BJAppClient sharedClient].requestSerializer  
  105.                                   requestWithMethod:requestType URLString:string parameters:nil error:&error] URL] path];  
  106.       
  107.     for (NSOperation operation in [BJAppClient sharedClient].operationQueue.operations)  
  108.         //如果是请求队列  
  109.         if ([operation isKindOfClass:[NSURLSessionTask class]])  
  110.             //请求的类型匹配  
  111.             BOOL hasMatchRequestType [requestType isEqualToString:[[(NSURLSessionTask *)operation currentRequest] HTTPMethod]];  
  112.             //请求的url匹配  
  113.             BOOL hasMatchRequestUrlString [urlToPeCanced isEqualToString:[[[(NSURLSessionTask *)operation currentRequest] URL] path]];  
  114.             //两项都匹配的话  取消该请求  
  115.             if (hasMatchRequestType&&hasMatchRequestUrlString 
  116.                 [operation cancel];  
  117.              
  118.          
  119.      
  120.  
  121.   
  122. (void)AFNetworkStatus  
  123.  
  124.       
  125.     //1.创建网络监测者  
  126.     AFNetworkReachabilityManager *manager [AFNetworkReachabilityManager sharedManager];  
  127.       
  128.       
  129.       
  130.     [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)  
  131.         //这里是监测到网络改变的block  可以写成switch方便  
  132.         //在里面可以随便写事件  
  133.         switch (status)  
  134.             case AFNetworkReachabilityStatusUnknown:  
  135.                 NSLog(@"未知网络状态");  
  136.                 break;  
  137.             case AFNetworkReachabilityStatusNotReachable:  
  138.                 NSLog(@"无网络");  
  139.                 networkReachabilityStatusUnknown();  
  140.                 break;  
  141.                   
  142.             case AFNetworkReachabilityStatusReachableViaWWAN:  
  143.                 NSLog(@"蜂窝数据网");  
  144.                 networkReachabilityStatusReachableViaWWAN();  
  145.                 break;  
  146.                   
  147.             case AFNetworkReachabilityStatusReachableViaWiFi:  
  148.                 NSLog(@"WiFi网络");  
  149.                   
  150.                 break;  
  151.                   
  152.             default:  
  153.                 break;  
  154.          
  155.           
  156.     }]  
  157.  
  158.   
  159. void networkReachabilityStatusUnknown()  
  160.  
  161.     UIAlertController *alert [UIAlertController alertControllerWithTitle:@"已为”VRMAX“关闭蜂窝移动数据"  
  162.                                                                    message:@"您可以在”设置“中为此应用程序打开蜂窝移动数据。"  
  163.                                                             preferredStyle:UIAlertControllerStyleAlert];  
  164.     [alert addAction:[UIAlertAction actionWithTitle:@"设置"  
  165.                                               style:UIAlertActionStyleDefaul 
  166.                                             handler:^(UIAlertAction _Nonnull action)  
  167.                                                 canOpenURLString(@"prefs:root=MOBILE_DATA_SETTINGS_ID");  
  168.                                             }]];  
  169.     [alert addAction:[UIAlertAction actionWithTitle:@"好"  
  170.                                               style:UIAlertActionStyleCancel handler:nil]];  
  171.  
  172.   
  173. void networkReachabilityStatusReachableViaWWAN()  
  174.  
  175.     UIAlertController *alert [UIAlertController alertControllerWithTitle:@"“VRMAX”正在使用流量,确定要如此土豪吗?"  
  176.                                                                    message:@"建议开启WIFI后观看视频。"  
  177.                                                             preferredStyle:UIAlertControllerStyleAlert];  
  178.     [alert addAction:[UIAlertAction actionWithTitle:@"设置"  
  179.                                               style:UIAlertActionStyleDefaul 
  180.                                             handler:^(UIAlertAction _Nonnull action)  
  181.                                                 canOpenURLString(@"prefs:root=MOBILE_DATA_SETTINGS_ID");  
  182.                                             }]];  
  183.     [alert addAction:[UIAlertAction actionWithTitle:@"好"  
  184.                                               style:UIAlertActionStyleCancel handler:nil]];  
  185.  
  186. @end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值