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

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

Demo下载地址:AFNetworkingDemo

AFNetworking2.5使用-转的更多相关文章

  1. AFNetworking2.x 使用过程中遇到的问题

    1.//以下写一下关于AFNetworking2.0的GET数据请求问题,刚開始的时候没有写以下标红的代码,所以导致有一个问题.错误显演示样例如以下: Error: Error Domain=AFNe ...

  2. AFNetworking2.5使用2

    链接地址:http://blog.csdn.net/abc4715760/article/details/46521111 官网下载2.5版本:http://afnetworking.com/ 此文章 ...

  3. AFNetworking2.0简易GET,POST请求封装以及使用

    AFNetworking2.0简易GET,POST请求封装以及使用 AFNetworking不用我赘述其强大性,本人仅仅做了非常简易的封装,解决了有时候请求出错的问题,提供源码给大家. 封装源码库下载 ...

  4. AFNetworking2.0源代码解析

    写在前面给大家推荐一个不错的站点 点击打开链接 本文測试样例源代码下载地址 近期看AFNetworking2的源代码.学习这个知名网络框架的实现.顺便梳理写下文章. AFNetworking的代码还在 ...

  5. AFNetworking2.0源码解析<一>

    本篇先看看AFURLConnectionOperation,AFURLConnectionOperation继承自NSOperation,是一个封装好的任务单元,在这里构建了NSURLConnecti ...

  6. soap request by afnetworking2.X/3.X

    for 2.X 参考 http://jiapumin.iteye.com/blog/2109378 AFHTTPRequestOperationManager *manager = [AFHTTPRe ...

  7. AFNetworking2.4.1 解析

    http://wenku.baidu.com/view/6ec734a84028915f814dc26d.html

  8. AFNetworking2.0 NSHipster翻译

    AFNetworking 是当前 iOS 和 Mac OS X 开发中最广泛使用的开源项目之一.它帮助了成千上万叫好又叫座的应用,也为其它出色的开源库提供了基础.这个项目是社区里最活跃.最有影响力的项 ...

  9. AFNetworking2.0后 进行Post请求

    本文以新浪微博的Oauth认证为样例进行Post请求的演示 以下直接上代码: #import "ViewController.h" #import "AFNetworki ...

随机推荐

  1. robotframework接口自动化

    robot framework框架在测试接口上比soapUI好用的多,在此介绍下get方法的HTTP接口,其实这个接口也是把POST数据作为参数进行get请求,使用post 方法也是一样,一共6步就可 ...

  2. Javascript 运行机制

    先看一下下面这段js代码: console.log('1'); setTimeout(function(){ console.log('2'); },0); console.log('3'); 请问打 ...

  3. notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比方lua、python等)

    在程序开发过程中,程序猿经经常使用到的一个功能就是查找引用(Find Reference).Visual Studio里面的相应功能是"查找全部引用"(Find All Refer ...

  4. Android学习 多读官网,故意健康---手势

    官网地址 ttp://developer.android.com/training/gestures/detector.html: 一.能够直接覆盖Activity的onTouch方法 public ...

  5. 搭建gitserver

    1.下载gitosis代码出错 git clone git://eagain.net/gitosis.git Initialized empty Git repository in /tmp/gito ...

  6. 行转列--Excel和数据库的完美结合

    入职到如今已经有一段时间了,除了不断完好新功能外,线上运维也是一项非常重要的任务,每天都须要占用一 定量的时间来处理,这时候如何高效准确的来解决这些问题是非常值得考虑的.       今天客服人员给我 ...

  7. github相关

    1 某次release的源码 某次release的源码在release列表中,不在branch中,tag和release是在一起的.所以,下载某个release的源码应该去release中找,而不应该 ...

  8. Java 解析excel2003和2007区别和兼容性问题(POI操作)

    最近在使用POI对excel操作中发现一些问题,2003和2007的区别还是蛮大的: 2007相关的包: poi-3.9.jar poi-examples-3.8.jar poi-excelant-3 ...

  9. ORA-09817

    连接数据库的时候报:ORA-09817:write to audit file,在网上搜索了下,发现时oracle安装目录下面的磁盘空间不够,有不少人给出了解决办法,下面即是一例: 连接oracle  ...

  10. [Usaco2015DEC] Breed Counting

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4397 [算法] 树状数组 时间复杂度 : O(QlogN) [代码] #includ ...