@implementation ZBJAFNetworkTool
+ (void)getUrl:(NSString *)url
body:(id)body
result:(ZBJResult)result
headerFile:(NSDictionary *)headerFile
success:(void (^)(id result))success
failure:(void (^)(NSError *error))failure
{
NSString *str = [url stringByReplacingOccurrencesOfString:@"/" withString:@""];
NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *caches = [sandBoxPath stringByAppendingPathComponent:str];
id responseObject = [NSKeyedUnarchiver unarchiveObjectWithFile:caches];
if (responseObject != nil) {
success(responseObject);
}
/**
*? 1.獲取網(wǎng)絡(luò)請求管理類
*/
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//? ? 3.為網(wǎng)絡(luò)請求加請求頭
if (headerFile) {
for (NSString *key in headerFile.allKeys) {
[manager.requestSerializer setValue:headerFile[key] forHTTPHeaderField:key];
}
}
//? ? 4.設(shè)置返回值類型
switch (result) {
/**
*? 返回值為NSData
*/
case ZBJData:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
break;
case ZBJJson:
break;
case ZBJXML:
/**
*? XML型
*/
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
break;
default:
break;
}
//? ? 2.設(shè)置網(wǎng)絡(luò)請求返回值所支持的參數(shù)類型
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", nil]];
#pragma mark 讓網(wǎng)絡(luò)指示器旋轉(zhuǎn)
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
//? ? 5.發(fā)送網(wǎng)絡(luò)請求
[manager GET:url parameters:body success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject) {
//? ? ? ? ? ? 成功回調(diào)
success(responseObject);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
//? ? ? ? ? ? NSString *str = [url stringByReplacingOccurrencesOfString:@"/" withString:@""];
// 緩存
NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *sandBoxPath = sandBox[0];
NSString *caches = [sandBoxPath stringByAppendingPathComponent:str];
[NSKeyedArchiver archiveRootObject:responseObject toFile:caches];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (error) {
//? ? ? ? ? ? 失敗回調(diào)
failure(error);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
}];
}
+ (void)postUrl:(NSString *)url
body:(id)body
result:(ZBJResult)result
requestStyle:(ZBJRequestStyle)requestStyle
headerFile:(NSDictionary *)headerFile
success:(void (^)(id result))success
failure:(void (^)(NSError *error))failure
{
//? ? 1.獲取網(wǎng)絡(luò)請求管理類
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//? ? 3.網(wǎng)絡(luò)請求請求體的類型
switch (requestStyle) {
case ZBJRequestJSON:
manager.requestSerializer = [AFJSONRequestSerializer serializer];
break;
case ZBJRequestString:
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, id parameters, NSError *__autoreleasing *error) {
return parameters;
}];
break;
default:
break;
}
//? ? 4.為網(wǎng)絡(luò)請求加請求頭
if (headerFile) {
for (NSString *key in headerFile.allKeys) {
[manager.requestSerializer setValue:headerFile[key] forHTTPHeaderField:key];
}
}
//? ? 5.網(wǎng)絡(luò)請求返回值的數(shù)據(jù)類型
switch (result) {
/**
*? 返回值為NSData
*/
case ZBJData:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
break;
case ZBJJson:
break;
case ZBJXML:
/**
*? XML型
*/
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
break;
default:
break;
}
//? ? 2.設(shè)置網(wǎng)絡(luò)請求返回值支持的類型
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", nil]];
//? ? 6.發(fā)送網(wǎng)絡(luò)請求
[manager POST:url parameters:body success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (error) {
failure(error);
}
}];
}