zoukankan      html  css  js  c++  java
  • AFNetworking2.5使用-转

    来自:http://blog.csdn.net/daiyelang/article/details/38434023

    官网下载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. }  


    Demo下载地址:AFNetworkingDemo

  • 相关阅读:
    ArrayList removeRange方法分析
    LinkedHashMap源码分析(基于JDK1.6)
    LinkedList原码分析(基于JDK1.6)
    TreeMap源码分析——深入分析(基于JDK1.6)
    51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
    51 NOD 1049 最大子段和 动态规划 模板 板子 DP
    51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
    8月20日 训练日记
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/endtel/p/4807461.html
Copyright © 2011-2022 走看看