首页 > 代码库 > AFNetworking的二次封装

AFNetworking的二次封装

//

//  NetworkService.m

//  AFNetworking - demo

//

//  Created by liman on 14-12-2.

//  Copyright (c) 2014 liman. All rights reserved.

//

 

#import "NetworkService.h"

 

@implementation NetworkService

 

#pragma mark - public methods

// GCD单例

+ (NetworkService *)sharedService;

{

    static NetworkService *__singletion;

    

    static dispatch_once_t onceToken;

    

    dispatch_once(&onceToken, ^{

        

        __singletion = [[self alloc] init];

        

    });

    

    return __singletion;

}

 

 

// 请求网络数据

- (void)requestDataWithFrontURL:(NSString *)frontURL method:(NSString *)method parameter:(NSDictionary *)parameter header:(NSDictionary *)header body:(NSString *)body timeoutInterval:(NSTimeInterval)timeoutInterval result:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success

                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure

{

    // 开启状态栏菊花

    [self open];

    

    // GET方法单独特殊处理 =================================================================================

    

    if ([method isEqualToString:@"GET"])

    {

        // 1.初始化

        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

        

        

        // 2.设置请求格式 (默认二进制, 这里不用改也OK)

        manager.requestSerializer = [AFHTTPRequestSerializer serializer];

        

        

        // 3.设置超时时间

        manager.requestSerializer.timeoutInterval = timeoutInterval;

        

        

        // 4.设置消息头

        if (header) {

            

            for (NSString *key in [header allKeys]) {

                [manager.requestSerializer setValue:[header objectForKey:key] forHTTPHeaderField:key];

            }

        }

        

        

        // 5.设置返回格式 (默认JSON, 这里必须改为二进制)

        manager.responseSerializer = [AFHTTPResponseSerializer serializer];

        

        

        // 6.请求

        [manager GET:frontURL parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {

            

            // 成功

            success(operation, responseObject);

            

            // 关闭状态栏菊花

            [self close];

            

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            

            // 超时

            failure(operation, error);

            

            // 关闭状态栏菊花

            [self close];

        }];

    }

    

    

    

    

    // POST, PUT方法通用处理 =================================================================================

    

    if ([method isEqualToString:@"POST"] || [method isEqualToString:@"PUT"])

    {

        // 0. 拼接完整的URL地址

        NSMutableArray *laterArr = [NSMutableArray array];

        

        for (NSString *key in [parameter allKeys]) {

            

            NSString *keyValue = http://www.mamicode.com/[key stringByAppendingFormat:@"=%@",[parameter objectForKey:key]];

            [laterArr addObject:keyValue];

        }

        

        NSString *laterURL = [laterArr componentsJoinedByString:@"&"];

        NSString *finalURL = [frontURL stringByAppendingFormat:@"?%@", laterURL];

        

        

        // 1.初始化

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:finalURL]];

        

        

        // 2.设置请求类型

        request.HTTPMethod = method;

        

        

        // 3.设置超时时间

        request.timeoutInterval = timeoutInterval;

        

        

        // 4.设置消息头

        if (header) {

            

            for (NSString *key in [header allKeys]) {

                [request setValue:[header objectForKey:key] forHTTPHeaderField:key];

            }

        }

        

        

        // 5.设置消息体

        if (body) {

            

            request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];

        }

        

        

        // 6.请求

        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

        

        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

            

            // 成功

            success(operation, responseObject);

            

            // 关闭状态栏菊花

            [self close];

            

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            

            // 超时

            failure(operation, error);

            

            // 关闭状态栏菊花

            [self close];

        }];

        

        [operation start];

    }

}

 

#pragma mark - private methods

// 开启状态栏菊花

- (void)open

{

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

}

 

// 关闭状态栏菊花

- (void)close

{

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

}

 

@end

AFNetworking的二次封装