AFNetworking3.0网络请求方法封装(自带缓存功能)
来源:互联网 发布:阿里云重新安装系统 编辑:程序博客网 时间:2024/06/05 10:34
原帖地址:http://blog.csdn.net/qq_30402119/article/details/49822513
GET请求封装
注意: 先将AFNetworking三方文件拖入工程
这段方法粘在新类的.h文件中
创建新类基于NSObject, 定义需要用到的枚举
#import <Foundation/Foundation.h>/* 表示返回数据类型 */typedef NS_ENUM(NSUInteger, responseStyle) { DATA, JSON, XML,};/* POST中表示bodyStyle类型 */typedef NS_ENUM(NSUInteger, bodyStyle) { stringStyle, JSONStyle,};
声明GET和POST两种网络请求方式的类方法
@interface HTTPTOOL : NSObject/* @param body : 有的GET参数是和url分开的 */+ (void)GETWithURL:(NSString *)url withBody:(NSDictionary *)body withHttpHead:(NSDictionary *)head responseStyle:(responseStyle)style withSuccess:(void(^)(id result))success withFail:(void(^)(id result))fail;/* POST网络请求方法声明 */+ (void)POSTWithURL:(NSString *)url withBody:(id)body withBodyStyle:(bodyStyle)bodyStyle withHttpHead:(NSDictionary *)head responseStyle:(responseStyle)style withSuccess:(void(^)(id result))success withFail:(void(^)(NSError *error))fail;@end
.m文件中头文件引入
#import "HTTPTOOL.h"#import "AFNetworking.h" /* 头文件引入, 如果使用cocoapod安装的三方类库使用“<>” */@implementation HTTPTOOL
GET网络请求方法实现
+ (void)GETWithURL:(NSString *)url withBody:(NSDictionary *)body withHttpHead:(NSDictionary *)head responseStyle:(responseStyle)style withSuccess:(void(^)(id result))success withFail:(void(^)(id result))fail { NSString *url_string = [NSString stringWithString:url]; /* 创建一个网络请求管理 */ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; /* 添加请求头 */ if (head) { for (NSString *key in head) { [manager.requestSerializer setValue:head[key] forHTTPHeaderField:key]; } } /* 判断返回数据类型 */ switch (style) { case DATA: { manager.responseSerializer = [AFHTTPResponseSerializer serializer]; break; } case JSON: { manager.responseSerializer = [AFJSONResponseSerializer serializer]; break; } case XML: { manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; break; } } /* 设置请求接受的数据类型 */ [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil]]; //本地缓存设置,沙盒路径设置 NSArray *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *pathString = path.lastObject; NSString *pathLast =[NSString stringWithFormat:@"/Caches/com.hackemist.get.default/%lu.text", (unsigned long)[url_string hash]]; //创建字符串文件存储路径 NSString *PathName =[pathString stringByAppendingString:pathLast]; //第一次进入判断有没有文件夹,如果没有就创建一个 NSString * textPath = [pathString stringByAppendingFormat:@"/Caches/com.hackemist.get.default"]; if (![[NSFileManager defaultManager]fileExistsAtPath:textPath]) { [[NSFileManager defaultManager]createDirectoryAtPath:textPath withIntermediateDirectories:YES attributes:nil error:nil]; } //设BOOL值 判断解析后的数据是数组还是字典 __block BOOL isClass = NO; /* get请求 */ [manager GET:url parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { if ([responseObject isKindOfClass:[NSArray class]]) { isClass = YES; } else{ isClass = NO; } [responseObject writeToFile:PathName atomically:YES]; success(responseObject); } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) { NSString * cachePath = PathName; if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { //从本地读缓存文件 id responseObject = nil; if (isClass) { responseObject = [NSMutableArray arrayWithContentsOfFile:cachePath]; } else { responseObject = [NSMutableDictionary dictionaryWithContentsOfFile:cachePath]; } success(responseObject); } }];}
POST请求方法实现
+ (void)POSTWithURL:(NSString *)url withBody:(id)body withBodyStyle:(bodyStyle)bodyStyle withHttpHead:(NSDictionary *)head responseStyle:(responseStyle)style withSuccess:(void (^)(id))success withFail:(void (^)(NSError *))fail { NSString *url_string = [NSString stringWithString:url]; /* 创建http请求管理者 */ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; /* 处理body类型 */ switch (bodyStyle) { case stringStyle: { break; } case JSONStyle: { break; } } /* 添加请求头 */ if (head) { for (NSString *key in head) { [manager.requestSerializer setValue:head[key] forHTTPHeaderField:key]; } } /* 判断返回数据类型 */ switch (style) { case DATA: { manager.responseSerializer = [AFHTTPResponseSerializer serializer]; break; } case JSON: { manager.responseSerializer = [AFJSONResponseSerializer serializer]; break; } case XML: { manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; break; } default: break; } /* 设置请求接受的数据类型 */ [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil]]; //本地缓存设置,沙盒路径设置 NSArray *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *pathString = path.lastObject; NSString *pathLast =[NSString stringWithFormat:@"/Caches/com.hackemist.post.default/%lu.text", (unsigned long)[url_string hash]]; //创建字符串文件存储路径 NSString *PathName =[pathString stringByAppendingString:pathLast]; //第一次进入判断有没有文件夹,如果没有就创建一个 NSString * textPath = [pathString stringByAppendingFormat:@"/Caches/com.hackemist.post.default"]; if (![[NSFileManager defaultManager]fileExistsAtPath:textPath]) { [[NSFileManager defaultManager]createDirectoryAtPath:textPath withIntermediateDirectories:YES attributes:nil error:nil]; } //设BOOL值 判断解析后的数据是数组还是字典 __block BOOL isClass = NO; /* POST请求 */ [manager POST:url parameters:body success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { if ([responseObject isKindOfClass:[NSArray class]]) { isClass = YES; } else{ isClass = NO; } [responseObject writeToFile:PathName atomically:YES]; success(responseObject); } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) { NSString * cachePath = PathName; if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { //从本地读缓存文件 id responseObject = nil; if (isClass) { responseObject = [NSMutableArray arrayWithContentsOfFile:cachePath]; } else { responseObject = [NSMutableDictionary dictionaryWithContentsOfFile:cachePath]; } success(responseObject); } }];}
0 0
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- iOS --- AFNetworking3.0网络请求方法封装(自带缓存功能)
- 用AFNetworking3.0封装网络请求
- 用AFNetworking3.0封装网络请求
- 用AFNetworking3.0封装网络请求
- 使用AFNetworking3.0封装网络请求
- AFNetworking3.0网络请求
- 基于AFNetworking3.0网络封装
- 基于AFNetworking3.0网络封装
- AFnetworking3.0的网络请求
- iOS 开发 AFNetworking3.0源码解析(一:结构图/网络请求三次封装/上传下载/网络监测)
- 基于AFNetworking3.0的网络封装
- Xutils3.0网络带缓存的封装
- AFNetworking3.0 如何取消单个网络请求
- 网络请求-AFNetworking3.0使用简介
- ios中afnetworking3.0网络请求
- 基于易班API的Java开发入门教程
- Java学习笔记(83)----------继承详解
- Spring 4 学习笔记5:Spring AOP
- iOS上传语音到服务器
- Tomcat调优
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- java中判断字符串是否为数字的方法的几种方法
- gstreamer插件之 videotestsrc
- 打开WiFi热点(AP)
- Java 面向对象编程--第十五章 集合(学习笔记)
- 语音回呼api 发起回呼
- JAVA设计模式之工厂模式
- CountDownLatch浅析
- 第12章 Spring消息