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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM