iOS--AFNetworking3.0的使用


從github下載AFNetworking3.0,把AFNetworking.h 和 UIKit+AFNetworking.h導入工程

(下載地址:https://github.com/AFNetworking/AFNetworking.git)

注意!!

AFNetworking不支持text/html

遇到請求頭到錯誤時在AFURLResponseSerialization.m里修改

1 //把@"text/html" 添加到下面代碼里就行,
2 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];  

 

或者在需要的地方寫代碼

1 //設置請求頭contenttypes信息
2      manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

 

 

 

 

//初始化
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

 

 

 

 如果后台接口是二進制格式

//默認的
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

如果后台接口是JSON格式

manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

 

GET Request

 

[manager GET:@"example" parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
        //這里可以用來顯示下載進度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //成功
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //失敗
    }];

 

 

 

POST  Request

 

//post請求參數一般用字典,鍵要與請求url的參數名一致。
[manager POST:@"example" parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        //進度
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //成功
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //失敗
    }];

 

Shared Network Reachability

 

//監聽網絡
   /*
    AFNetworkReachabilityStatusUnknown          = -1,
    AFNetworkReachabilityStatusNotReachable     = 0,
    AFNetworkReachabilityStatusReachableViaWWAN = 1,
    AFNetworkReachabilityStatusReachableViaWiFi = 2,
    NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusNotReachable:
            return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil);
        case AFNetworkReachabilityStatusReachableViaWWAN:
            return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil);
        case AFNetworkReachabilityStatusReachableViaWiFi:
            return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil);
        case AFNetworkReachabilityStatusUnknown:
        default:
            return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil);
    }
}
   */    
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
          NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status))
  }];
 [[AFNetworkReachabilityManager sharedManager] startMonitoring];
//單純判斷有無網絡可以用isReachable屬性
if ([[AFNetworkReachabilityManager manager] isReachable] == NO) {
    //do something  
}

 

上傳圖片

圖片上傳的時候要問后台只能單張上傳或者多張上傳.

        //單張上傳
        [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            //創建待上傳圖片的名稱,為了不重名,一般使用當前時間+圖片類型(eg .png)為名稱
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            //服務器保存上傳圖片的路徑,這個路徑后台給的話用后台的,沒給就自己創建(此處沒給)
            NSString *name = [formatter stringFromDate:[NSDate date]];
            //后綴  .png   .jpg
            NSString *fileName = [[formatter stringFromDate:[NSDate date]] stringByAppendingString:@".jpg"];
            /*
             *UIImageJPEGRepresentation(image,1.0)   //待壓縮比例
             *UIImagePNGRepresentation(image)
             *這是iOS自帶的將UIImage對象轉成NSData
             */
            NSData *data = UIImageJPEGRepresentation(image,1.0);
            //開始上傳
            [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpg"];
            
        } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //根據responseObject獲取后台返回的內容
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        }];
  /*
  * 多張上傳和單張上傳的區別:
  * 圖片名要按時間+數組中圖片的index+.jpg
  * 服務器保存圖片的路徑按時間+數組中圖片的index
  */
  //多張上傳
    //圖片上傳
    for (int i = 0; i < imageArr.count; i ++) {
       [manager POST:@"http://112.54.80.235:50406/IndustryPioneer.svc/uploadimageIos" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            //創建待上傳圖片的名稱,為了不重名,一般使用當前時間+圖片類型(eg .png)為名稱
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            //服務器保存上傳圖片的路徑,這個路徑后台給的話用后台的,沒給就自己創建(此處沒給)
            NSString *name = [NSString stringWithFormat:@"%@%d",[formatter stringFromDate:[NSDate date]],i];
            //后綴  .png   .jpg
            NSString *fileName = [[NSString stringWithFormat:@"%@%d",[formatter stringFromDate:[NSDate date]],i] stringByAppendingString:@".jpg"];
            /*
             *UIImageJPEGRepresentation(image,1.0)   //待壓縮比例
             *UIImagePNGRepresentation(image)
             *這是iOS自帶的將UIImage對象轉成NSData
             */
            
            NSData *data = UIImageJPEGRepresentation([imageArr objectAtIndex :i],1.0);
            //開始上傳
            [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpg"];
            
        } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //根據responseObject獲取后台返回的內容
 
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        }];

    }

 

 

 

 


免責聲明!

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



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