AFNetworking 3.X 簡單使用


一、網絡請求:

  • GET方式:
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    [manager GET:URLString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"responseObject : %@", responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error : %@", error.description);

    }];
  • POST方式:
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    [manager POST:URLString parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"responseObject : %@", responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error : %@", error);
    }];

二、文件上傳:

  • 通過工程中的文件上傳
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];

    [sessionManager POST:URL parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"a.jpg" ofType:nil];
        NSData *imgData = [NSData dataWithContentsOfFile:filePath];
        
        [formData appendPartWithFileData:imgData name:@"pic" fileName:@"filename" mimeType:@"image/jpg"];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        // 獲取上傳的進度
        NSLog(@"%.2f",uploadProgress.fractionCompleted);
        NSLog(@"線程:%@",[NSThread currentThread]); // 子線程
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 請求成功
        NSLog(@"請求成功:%@",responseObject);
        NSLog(@"線程:%@",[NSThread currentThread]); // 主線程
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 請求失敗
        NSLog(@"請求失敗:%@",error);
    }];
  • 根據URL路徑上傳
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];

    [sessionManager POST:@" " parameters:@{@" " : @" "} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        // 在block中設置需要上傳的文件
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件路徑"] name:@"file" error:nil];
        
    } success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"成功:%@", responseObject);
        
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"失敗:%@", error);
    }];

三、文件下載

  • 使用 NSURLSessionDownloadTask 類
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    NSURL *url = [NSURL URLWithString:@" "];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 下載文件
    NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        // block會實時調用
        NSLog(@"%.2f",downloadProgress.fractionCompleted);
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        // NSHomeDirectory()可以得到應用程序目錄的路徑
        // 返回一個URL存儲文件
        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/***.mp3"];
        NSURL *url = [NSURL fileURLWithPath:filePath];
        
        return url;

    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        if (error) {
            NSLog(@"下載失敗 ~~~ %@",error);
        }else {
            NSLog(@"下載成功");
        }
    }];
    
    // 開始下載任務
    [task resume];

四、網絡監聽

  • 使用 AFNetworkReachabilityManager 類
    // 獲得網絡監控的管理者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager manager];
    
    // 只要網絡環境發生變化,就會調用此 block
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        
        /* 枚舉里面的四個狀態
         AFNetworkReachabilityStatusUnknown          = -1,  未知
         AFNetworkReachabilityStatusNotReachable     =  0,   不可用
         AFNetworkReachabilityStatusReachableViaWWAN =  1,   手機自帶網絡
         AFNetworkReachabilityStatusReachableViaWiFi =  2,   wifi
         */
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"不可用");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"手機自帶網絡");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"Wifi");
                break;
            default:
                break;
        }   
    }];
    
    // 開始監聽
    [manager startMonitoring];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容