zoukankan      html  css  js  c++  java
  • AFNetworking使用方法

    官网下载2.5版本:http://afnetworking.com/

    此文章是基于AFNetworking2.5版本的,需要看AFNetworking2.0版本的请看上一篇文章:AFNetworking2.0使用

    1.检测网络状态

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)netWorkStatus  
    2. {  
    3.     /** 
    4.      AFNetworkReachabilityStatusUnknown          = -1,  // 未知 
    5.      AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接 
    6.      AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花钱 
    7.      AFNetworkReachabilityStatusReachableViaWiFi = 2,   // WiFi 
    8.      */  
    9.     // 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring  
    10.     [[AFNetworkReachabilityManager sharedManager] startMonitoring];  
    11.       
    12.     // 检测网络连接的单例,网络变化时的回调方法  
    13.     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {  
    14.         NSLog(@"%ld", status);  
    15.     }];  
    16. }  


    2.JSON方式获取数据

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)JSONDataWithUrl:(NSString *)url success:(void (^)(id json))success fail:(void (^)())fail;  
    2. {  
    3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
    4.       
    5.     NSDictionary *dict = @{@"format": @"json"};  
    6.     // 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情  
    7.     [manager GET:url parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {  
    8.         if (success) {  
    9.             success(responseObject);  
    10.         }  
    11.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
    12.         NSLog(@"%@", error);  
    13.         if (fail) {  
    14.             fail();  
    15.         }  
    16.     }];  
    17. }  


    3.xml方式获取数据

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)XMLDataWithUrl:(NSString *)urlStr success:(void (^)(id xml))success fail:(void (^)())fail  
    2. {  
    3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
    4.       
    5.     // 返回的数据格式是XML  
    6.     manager.responseSerializer = [AFXMLParserResponseSerializer serializer];  
    7.       
    8.     NSDictionary *dict = @{@"format": @"xml"};  
    9.       
    10.     // 网络访问是异步的,回调是主线程的,因此程序员不用管在主线程更新UI的事情  
    11.     [manager GET:urlStr parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {  
    12.         if (success) {  
    13.             success(responseObject);  
    14.         }  
    15.           
    16.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
    17.         NSLog(@"%@", error);  
    18.         if (fail) {  
    19.             fail();  
    20.         }  
    21.     }];  
    22. }  


    4.post提交json数据

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)postJSONWithUrl:(NSString *)urlStr parameters:(id)parameters success:(void (^)(id responseObject))success fail:(void (^)())fail  
    2. {  
    3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
    4.     // 设置请求格式  
    5.     manager.requestSerializer = [AFJSONRequestSerializer serializer];  
    6.     // 设置返回格式  
    7.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
    8.     [manager POST:urlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {  
    9. //        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];  
    10.         if (success) {  
    11.             success(responseObject);  
    12.         }  
    13.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
    14.         NSLog(@"%@", error);  
    15.         if (fail) {  
    16.             fail();  
    17.         }  
    18.     }];  
    19.       
    20. }  


    5.下载文件

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)sessionDownloadWithUrl:(NSString *)urlStr success:(void (^)(NSURL *fileURL))success fail:(void (^)())fail  
    2. {  
    3.     NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];  
    4.     AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:config];  
    5.   
    6.     NSString *urlString = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
    7.       
    8.     NSURL *url = [NSURL URLWithString:urlString];  
    9.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
    10.       
    11.     NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {  
    12.         // 指定下载文件保存的路径  
    13.         //        NSLog(@"%@ %@", targetPath, response.suggestedFilename);  
    14.         // 将下载文件保存在缓存路径中  
    15.         NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];  
    16.         NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];  
    17.           
    18.         // URLWithString返回的是网络的URL,如果使用本地URL,需要注意  
    19. //        NSURL *fileURL1 = [NSURL URLWithString:path];  
    20.         NSURL *fileURL = [NSURL fileURLWithPath:path];  
    21.           
    22. //        NSLog(@"== %@ |||| %@", fileURL1, fileURL);  
    23.         if (success) {  
    24.             success(fileURL);  
    25.         }  
    26.           
    27.         return fileURL;  
    28.     } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {  
    29.         NSLog(@"%@ %@", filePath, error);  
    30.         if (fail) {  
    31.             fail();  
    32.         }  
    33.     }];  
    34.       
    35.     [task resume];  
    36. }  


    6.文件上传-自定义上传文件名

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. + (void)postUploadWithUrl:(NSString *)urlStr fileUrl:(NSURL *)fileURL fileName:(NSString *)fileName fileType:(NSString *)fileTye success:(void (^)(id responseObject))success fail:(void (^)())fail  
    2. {  
    3.     // 本地上传给服务器时,没有确定的URL,不好用MD5的方式处理  
    4.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
    5.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
    6.     //@"http://localhost/demo/upload.php"  
    7.     [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  
    8.           
    9. //        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];  
    10.           
    11.         // 要上传保存在服务器中的名称  
    12.         // 使用时间来作为文件名 2014-04-30 14:20:57.png  
    13.         // 让不同的用户信息,保存在不同目录中  
    14. //        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
    15. //        // 设置日期格式  
    16. //        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";  
    17. //        NSString *fileName = [formatter stringFromDate:[NSDate date]];  
    18.           
    19.         //@"image/png"  
    20.         [formData appendPartWithFileURL:fileURL name:@"uploadFile" fileName:fileName mimeType:fileTye error:NULL];  
    21.           
    22.     } success:^(AFHTTPRequestOperation *operation, id responseObject) {  
    23.         if (success) {  
    24.             success(responseObject);  
    25.         }  
    26.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
    27.         if (fail) {  
    28.             fail();  
    29.         }  
    30.     }];  
    31. }  


    7.文件上传-随机生成文件名

    [objc] view plaincopy在CODE上查看代码片派生到我的代码片
     
      1. + (void)postUploadWithUrl:(NSString *)urlStr fileUrl:(NSURL *)fileURL success:(void (^)(id responseObject))success fail:(void (^)())fail  
      2. {  
      3.     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
      4.     // AFHTTPResponseSerializer就是正常的HTTP请求响应结果:NSData  
      5.     // 当请求的返回数据不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer  
      6.     // 例如返回一个html,text...  
      7.     //  
      8.     // 实际上就是AFN没有对响应数据做任何处理的情况  
      9.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
      10.       
      11.     // formData是遵守了AFMultipartFormData的对象  
      12.     [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  
      13.           
      14.         // 将本地的文件上传至服务器  
      15. //        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];  
      16.           
      17.         [formData appendPartWithFileURL:fileURL name:@"uploadFile" error:NULL];  
      18.     } success:^(AFHTTPRequestOperation *operation, id responseObject) {  
      19. //        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];  
      20. //          
      21. //        NSLog(@"完成 %@", result);  
      22.         if (success) {  
      23.             success(responseObject);  
      24.         }  
      25.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
      26.         NSLog(@"错误 %@", error.localizedDescription);  
      27.         if (fail) {  
      28.             fail();  
      29.         }  
      30.     }];  
      31. }  
  • 相关阅读:
    [学习记录]Flask会话维护
    [学习记录]MarkDown语法
    [学习记录]jinja2模板语法
    [学习记录]flask资源加载
    [学习记录]flask初步
    [常用操作]使用github桌面版上传代码
    [学习记录]简明扼要的Sass
    接口Mock测试
    12 | 从0到1:你的第一个GUI自动化测试
    navicat导出DDL语句
  • 原文地址:https://www.cnblogs.com/jgCho/p/4904025.html
Copyright © 2011-2022 走看看