美文网首页
AFNetworking 3.X 简单使用

AFNetworking 3.X 简单使用

作者: Ching_Han | 来源:发表于2017-01-06 09:55 被阅读86次

一、网络请求:

  • 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];

相关文章

  • AFNetworking 3.X 简单使用

    一、网络请求: GET方式: POST方式: 二、文件上传: 通过工程中的文件上传 根据URL路径上传 三、文件下...

  • 收集优秀的第三方

    网络请求 1、AFNetworking2、AFNetworking 3.x 与YYCache封装,一句代码搞定数据...

  • AFNetworking源码分析(1)

    首先,AFNetworking是基于CFNetwork封装的。相对于3.x之前的版本,3.x摒弃了以前的NSURL...

  • AFNetworking简单使用

    iOS开发中一般情况下,简单地向某个Web站点简单的页面提交请求并获取服务器的响应,用Xcode自带的API就能胜...

  • AFNetworking使用及见解

    AFNetworking简单使用 AFNetworking我们在开发中经常会使用到,我这里就根据自己的使用来说下个...

  • AFNetworking 3.x 调用

    AFNetworking 3.x是基于NSURLSession再次封装的 大致结构如下: NSURLSession...

  • AFNetworking-数据流程

    AFNetworking AFNetWorking基本上是所有iOS项目的标配。现在升级带最新版的3.X了。得益于...

  • iOS 初探 AFNetworking

    本文不对AFNetworking作全面的解析,仅对比解析一下2.x和3.x的差异。 AFNetworking分为如...

  • iOS 初探 AFNetworking

    本文不对AFNetworking作全面的解析,仅对比解析一下2.x和3.x的差异。 AFNetworking源码分...

  • AFNetworking 3.x 使用心得

    AFNetworking毫无疑问是目前iOS开发中(Objective-C)最好的第三方网络库。一般规模的app使...

网友评论

      本文标题:AFNetworking 3.X 简单使用

      本文链接:https://www.haomeiwen.com/subject/huutbttx.html