官网下载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. HTTP 错误 503.2 - Service Unavailable 正在超过 serverRuntime@appConcurrentRequestLimit 设置的值。

    HTTP 错误 503.2 - Service Unavailable 正在超过 serverRuntime@appConcurrentRequestLimit 设置的值. dudu的解决办法:htt ...

  2. Lua中的require

    lua中的require机制    为了方便代码管理,通常会把lua代码分成不同的模块,然后在通过require函数把它们加载进来.现在看看lua的require的处理流程.1.require机制相关 ...

  3. typeof与GetType

    typeof: The typeof operator is used to obtain the System.Type object for a type. 运算符,获得某一类型的 System. ...

  4. java中产生对象的两种方式

    /* * 普通new对象的过程! */ Person pp = new Person(); System.out.println(pp); /* * 利用代用参数的构造器产生对象实例! * 首先获得相 ...

  5. codeforces D. Design Tutorial: Inverse the Problem

    题意:给定一个矩阵,表示每两个节点之间的权值距离,问是否可以对应生成一棵树, 使得这棵树中的任意两点之间的距离和矩阵中的对应两点的距离相等! 思路:我们将给定的矩阵看成是一个图,a 到 b会有多条路径 ...

  6. [git]解决rebase冲突

    git pull --rebase时产生冲突 有三个选项: git rebase --skip 效果是:抛弃本地的commit,采用远程的commit(慎用因为你本地的修改就会都没有!) git re ...

  7. sed之打印特定行与连续行

    接分号,表示打印特定行,如下命令只会打印出第一行与第十行 sed -n '1p;10p'  test.txt 接逗号,表达连续的行娄,如下命令打印出第一行到第十行 sed -n '1,10p' tes ...

  8. Web前端开发十日谈

    =========================================================================== 原文章: http://kb.cnblogs.c ...

  9. 利用IronJs在.NET程序里面跑javascript脚本

    what’s dlr The dynamic language runtime (DLR) is a runtime environment that adds a set of services f ...

  10. Symantec Backup Exec恢复数据库

    Insus.NET是使用Symantec Backup Exec来备份数据以及一些服务器文件.下面步骤是怎样恢复一个数据库.当我们数据库有问题,或是想恢复某一天的数据,得需要操作数据恢复Restore ...