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

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

1.检测网络状态

  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. [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  13. NSLog(@"%ld", status);
  14. }];
  15. }

2.JSON方式获取数据

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

3.xml方式获取数据

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

4.post提交json数据

  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. }

5.下载文件

  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. NSString *urlString = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  6. NSURL *url = [NSURL URLWithString:urlString];
  7. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  8. NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
  9. // 指定下载文件保存的路径
  10. //        NSLog(@"%@ %@", targetPath, response.suggestedFilename);
  11. // 将下载文件保存在缓存路径中
  12. NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
  13. NSString *path = [cacheDir stringByAppendingPathComponent:response.suggestedFilename];
  14. // URLWithString返回的是网络的URL,如果使用本地URL,需要注意
  15. //        NSURL *fileURL1 = [NSURL URLWithString:path];
  16. NSURL *fileURL = [NSURL fileURLWithPath:path];
  17. //        NSLog(@"== %@ |||| %@", fileURL1, fileURL);
  18. if (success) {
  19. success(fileURL);
  20. }
  21. return fileURL;
  22. } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
  23. NSLog(@"%@ %@", filePath, error);
  24. if (fail) {
  25. fail();
  26. }
  27. }];
  28. [task resume];
  29. }

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

  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. //        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];
  9. // 要上传保存在服务器中的名称
  10. // 使用时间来作为文件名 2014-04-30 14:20:57.png
  11. // 让不同的用户信息,保存在不同目录中
  12. //        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  13. //        // 设置日期格式
  14. //        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
  15. //        NSString *fileName = [formatter stringFromDate:[NSDate date]];
  16. //@"image/png"
  17. [formData appendPartWithFileURL:fileURL name:@"uploadFile" fileName:fileName mimeType:fileTye error:NULL];
  18. } success:^(AFHTTPRequestOperation *operation, id responseObject) {
  19. if (success) {
  20. success(responseObject);
  21. }
  22. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  23. if (fail) {
  24. fail();
  25. }
  26. }];
  27. }

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

    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. // formData是遵守了AFMultipartFormData的对象
    11. [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    12. // 将本地的文件上传至服务器
    13. //        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"头像1.png" withExtension:nil];
    14. [formData appendPartWithFileURL:fileURL name:@"uploadFile" error:NULL];
    15. } success:^(AFHTTPRequestOperation *operation, id responseObject) {
    16. //        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    17. //
    18. //        NSLog(@"完成 %@", result);
    19. if (success) {
    20. success(responseObject);
    21. }
    22. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    23. NSLog(@"错误 %@", error.localizedDescription);
    24. if (fail) {
    25. fail();
    26. }
    27. }];
    28. }

AFNetworking使用方法的更多相关文章

  1. AFNetworking 使用方法(2.0)

    AFNetworking 使用方法(2.0) 分类: IOS2014-11-12 09:17 2018人阅读 评论(0) 收藏 举报   目录(?)[+]   本文介绍的是AFNetworking-2 ...

  2. AFNetworking自带的解析图片的方法

    首先要导入头文件 #import "UIKit+AFNetworking.h" 方法如下: [personImageView setImageWithURL:[NSURL URLW ...

  3. AFNetworking使用详解

    导语: 众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使 ...

  4. iOS 判断当前网络状态的三种方法

    http://www.cocoachina.com/ios/20171103/21039.html 在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定改干嘛.比如视频播放,需要线判断 ...

  5. AFN的坑--NSCachedURLResponse缓存

    网络正常的情况下,如果服务器宕机或者数据库出错,会造成访问服务器报错的情况,一般报错的内容是:无法连接到服务器或者其它错误.且服务器 修复后,仍然报错.经过排查,终于找出了原因所在:AFNetwork ...

  6. YTKNetwork源码详解

    本篇是第三篇关于网络请求的,将讲述YTKNetwork源码,上述两篇分别讲述AFNetworking源码解析以及结合自己项目封装AFNetworking. AFNetworking源码解析:https ...

  7. iOS上传图片问题

    今天一定得写一篇博客,有以下原因: 1>第一次做图片上传的功能,算是一种记录吧; 2>在这个问题上,纠结,迷茫了很久,主要还是被后台坑了; 1.上传图片的方法是用的AFNetWorking ...

  8. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  9. 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法

    使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...

随机推荐

  1. 使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法

    THE VERSION OF SQL IN USE DOES NOT SUPPORT DATATYPE ‘DATETIME2′ 主要错误原因,在使用ado.net entity的时候,entity使用 ...

  2. windows下面go语言环境搭建

    步骤一:golang下载 下载地址是:http://www.golangtc.com/download 下载完成之后解压缩,放到你的c:/根目录下面.然后配置一下环境变量! 环境变量配置如下: 1.新 ...

  3. 读Java Concurrency in Practice. 第六章.

    这一章开讲任务执行.绝大多数并发程序的工作都可以分解为抽象的.互不相关的工作单元,称之为任务(Task). 使用java线程来执行任务 以web服务器的实现举例, 此时将用户的一次连接,当做一个独立的 ...

  4. IE11之F12 Developer Tools--控制台工具(Console)

    前面我们介绍了IE11的Developer Tools中的第一个工具--DOM Explorer,这篇文章介绍第二个工具--控制台(Console),使用控制台工具查看错误和其他信息.发送调试输出.检 ...

  5. OpenProcess打开进程返回错误的问题

    问题描述 项目中需要做一个小功能:能够查看系统中当前正在运行的进程的内存信息,如内存块类型.分配状态.访问权限等.如下图所示: 需要的信息和上图相差无几.说起来也不算太难,毕竟现成的API已经提供了. ...

  6. Lucene-Analyzer

    Lucene文本解析器实现 把一段文本信息拆分成多个分词,我们都知道搜索引擎是通过分词检索的,文本解析器的好坏直接决定了搜索的精度和搜索的速度. 1.简单的Demo private static fi ...

  7. C# WinFrom 跨线程访问控件

    1.跨线程访问控件委托和类的定义 using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summ ...

  8. MVC应用程序结构与规划

    对MVC好长一段时间练习,说句实在的话,还有很多是感到陌生,很多是生疏...... 很多网友也是刚想学习MVC,看到Insus.NET每学习一种方法,一个技巧均写成博文,也很希望能获取到练习的源程序以 ...

  9. Opserver监控工具的使用

    Opserver监控工具的使用 Opserver是Stack Overflow的开源监控解决方案,由Stack Exchange发布,基于.NET框架构建.开源地址:https://github.co ...

  10. 推荐使用C++ 11

    如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11.当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的.我在下面给出了9个理由,它们分为 ...