链接地址:http://blog.csdn.net/abc4715760/article/details/46521111

官网下载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版本的,需要看AFNetworking2.0版本的请看上一篇文章:AFNetworking2.0使用

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

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

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

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

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

  3. AFNetworking2.0源代码解析

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

  4. AFNetworking2.5使用-转

    来自:http://blog.csdn.net/daiyelang/article/details/38434023 官网下载2.5版本:http://afnetworking.com/ 此文章是基于 ...

  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. struts2自己定义类型转换器

    1.1.  struts2自己定义类型转换器 1)        自定类型转换类,继承DefaultTypeConverter类 package com.morris.ticket.conversio ...

  2. BZOJ2440(全然平方数)二分+莫比乌斯容斥

    题意:全然平方数是指含有平方数因子的数.求第ki个非全然平方数. 解法:比較明显的二分,getsum(int middle)求1-middle有多少个非全然平方数,然后二分.求1-middle的非全然 ...

  3. 提高你的Java代码质量吧:使用valueof前必须进行校验

    一.分析 每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode.name.valueOf等,其中valueOf方法会把一个String类型的名称转变成枚 ...

  4. junit学习笔记(二):hamcrest和TestSuit

    1. hamcrest hamcrest可以有效增加junit的测试能力,用一些对通俗语言来进行测试. Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符 ...

  5. 抄书(B - 二分查找)

    抄书  (二分查找+贪心) 提示:二分查找一般写成非递归形式 时间复杂度:O(logn) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action? ...

  6. JavaEE Tutorials (4) - 企业bean入门

    4.1创建企业bean52 4.1.1编写企业bean类53 4.1.2创建converter Web客户端53 4.1.3运行converter示例544.2修改Java EE应用55 4.2.1修 ...

  7. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和

      题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...

  8. SQLite取值时的下标与创建表中字段的关系

  9. POJ3264——Balanced Lineup(线段树)

    本文出自:http://blog.csdn.net/svitter 题意:在1~200,000个数中.取一段区间.然后在区间中找出最大的数和最小的数字.求这两个数字的差. 分析:按区间取值,非常明显使 ...

  10. Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...