zoukankan      html  css  js  c++  java
  • AFNetworking3.1 基本使用

      1 #import "HttpsManager.h"
      2 
      3 @implementation HttpsManager
      4 #pragma mark - 创建请求者
      5 +(AFHTTPSessionManager *)manager
      6 {
      7     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
      8     // 超时时间
      9     manager.requestSerializer.timeoutInterval = kTimeOutInterval;
     10     
     11     // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题
     12     manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式
     13     //    manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式
     14     
     15     // 声明获取到的数据格式
     16     manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析
     17     //    manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据
     18     // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据
     19     return manager;
     20 }
     21 
     22 + (void)getUserCarShopAndSalesDataForSalesWithUserId:(NSString *)userId date:(NSString *)date selectAreaType:(NSString *)areaType Success:(SuccessBlock)success fail:(AFNErrorBlock)fail
     23 {
     24     // get请求也可以直接将参数放在字典里,AFN会自己讲参数拼接在url的后面,不需要自己凭借
     25     NSDictionary *param = @{@"user_id":userId, @"sale_date":date, @"accessToken":@"e9c0e60318ebd07ec2fe", @"area_type":areaType};
     26     // 创建请求类
     27     AFHTTPSessionManager *manager = [self manager];
     28     [manager GET:@"http://pm.yunhan-china.com/index.php/Api_sale/sales_get" parameters:param progress:^(NSProgress * _Nonnull downloadProgress) {
     29         // 这里可以获取到目前数据请求的进度
     30     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
     31         // 请求成功
     32         if(responseObject){
     33             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
     34             success(dict,YES);
     35         } else {
     36             success(@{@"msg":@"暂无数据"}, NO);
     37         }
     38     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
     39         // 请求失败
     40         fail(error);
     41     }];
     42 }
     43 
     44 + (void)loginWithUserAccount:(NSString *)account password:(NSString *)password success:(SuccessBlock)success fail:(AFNErrorBlock)fail
     45 {
     46     // 将请求参数放在请求的字典里
     47     NSDictionary *param = @{@"phoneNumber":account, @"password":@"f379eaf3c831b04de153469d1bec345e"};
     48     // 创建请求类
     49     AFHTTPSessionManager *manager = [self manager];
     50     [manager POST:@"http://pm.yunhan-china.com/index.php/api_common/login"
     51        parameters:param
     52          progress:^(NSProgress * _Nonnull uploadProgress) {
     53              // 这里可以获取到目前数据请求的进度
     54          } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
     55              // 请求成功
     56              if(responseObject){
     57                  NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
     58                  success(dict,YES);
     59              } else {
     60                  success(@{@"msg":@"暂无数据"}, NO);
     61              }
     62          } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
     63              // 请求失败
     64              fail(error);
     65          }];
     66     
     67 }
     68 
     69 - (void)downLoadWithUrlString:(NSString *)urlString
     70 {
     71     // 1.创建管理者对象
     72     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
     73     // 2.设置请求的URL地址
     74     NSURL *url = [NSURL URLWithString:urlString];
     75     // 3.创建请求对象
     76     NSURLRequest *request = [NSURLRequest requestWithURL:url];
     77     // 4.下载任务
     78     NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
     79         // 下载进度
     80         NSLog(@"当前下载进度为:%lf", 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
     81     } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
     82         // 下载地址
     83         NSLog(@"默认下载地址%@",targetPath);
     84         // 设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象
     85         NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
     86         return [NSURL fileURLWithPath:filePath]; // 返回的是文件存放在本地沙盒的地址
     87     } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
     88         // 下载完成调用的方法
     89         NSLog(@"%@---%@", response, filePath);
     90     }];
     91     // 5.启动下载任务
     92     [task resume];
     93 }
     94 
     95 - (void)uploadWithUser:(NSString *)userId UrlString:(NSString *)urlString upImg:(UIImage *)upImg
     96 {
     97     // 创建管理者对象
     98     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
     99     // 参数
    100     NSDictionary *param = @{@"user_id":userId};
    101     [manager POST:urlString parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    102         /******** 1.上传已经获取到的img *******/
    103         // 把图片转换成data
    104         NSData *data = UIImagePNGRepresentation(upImg);
    105         // 拼接数据到请求题中
    106         [formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
    107         /******** 2.通过路径上传沙盒或系统相册里的图片 *****/
    108         //        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
    109         
    110     } progress:^(NSProgress * _Nonnull uploadProgress) {
    111         // 打印上传进度
    112         NSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
    113     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    114         //请求成功
    115         NSLog(@"请求成功:%@",responseObject);
    116         
    117     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    118         //请求失败
    119         NSLog(@"请求失败:%@",error);
    120     }];
    121 }
    122 
    123 - (void)AFNetworkStatus{
    124     
    125     //1.创建网络监测者
    126     AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    127     
    128     /*枚举里面四个状态  分别对应 未知 无网络 数据 WiFi
    129      typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
    130      AFNetworkReachabilityStatusUnknown          = -1,      未知
    131      AFNetworkReachabilityStatusNotReachable     = 0,       无网络
    132      AFNetworkReachabilityStatusReachableViaWWAN = 1,       蜂窝数据网络
    133      AFNetworkReachabilityStatusReachableViaWiFi = 2,       WiFi
    134      };
    135      */
    136     
    137     [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    138         //这里是监测到网络改变的block  可以写成switch方便
    139         //在里面可以随便写事件
    140         switch (status) {
    141             case AFNetworkReachabilityStatusUnknown:
    142                 NSLog(@"未知网络状态");
    143                 break;
    144             case AFNetworkReachabilityStatusNotReachable:
    145                 NSLog(@"无网络");
    146                 break;
    147                 
    148             case AFNetworkReachabilityStatusReachableViaWWAN:
    149                 NSLog(@"蜂窝数据网");
    150                 break;
    151                 
    152             case AFNetworkReachabilityStatusReachableViaWiFi:
    153                 NSLog(@"WiFi网络");
    154                 
    155                 break;
    156                 
    157             default:
    158                 break;
    159         }
    160         
    161     }] ;  
    162 }  
    163 
    164 
    165 @end
  • 相关阅读:
    写一个函数的程序,判断是否是浮点数
    写一个函数,输入一个数,随机生成N条邮箱
    day4-python基础知识 <元组&&集合>
    day4-python基础知识<文件操作>
    程序--用户登录--<while循环>
    程序--<猜数字小游戏>--for
    使用ajax后提交事件后禁用按钮,事件执行完毕后,重新启用按钮
    ajax在弹出对话框中实现一个UpdateProgress进度条控件源代码
    运算符的结合性
    匿名方法
  • 原文地址:https://www.cnblogs.com/GJ-ios/p/5705684.html
Copyright © 2011-2022 走看看