封装AFNetworking

APPDelegate里还要设置一下
//监听网络状态,只调用一次
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];

#import <Foundation/Foundation.h>

@interface MyHttpDownLoad : NSObject
//cb callback回调
+(void) download:(NSString *)urlpath param:(NSDictionary *)dict finish:( void (^)(NSData *data,NSDictionary *obj, NSError *error))cb;
@end

#import "MyHttpDownLoad.h"
#import "AFNetworking.h"

static BOOL isFirst = NO;
static BOOL canCHeckNetwork = NO;

@implementation MyHttpDownLoad
+(void) download:(NSString *)urlpath param:(NSDictionary *)dict finish:(void (^)(NSData *,NSDictionary *obj, NSError *))cb{
    
    //1..检查网络链接(苹果公司提供的检查网络的第三方库 Reachability)
    //AFN 在 Reachability基础上作了一个本身的网络检查的库, 基本上同样

    if (isFirst == NO) {
        //网络只有在startMonitoring完成后才可使用检查网络状态
        [[AFNetworkReachabilityManager sharedManager] startMonitoring];
        [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            canCHeckNetwork = YES;
        }];
        isFirst = YES;
    }
    
    //只能在监听完善以后才能够调用
    BOOL isOK = [[AFNetworkReachabilityManager sharedManager] isReachable];
    //BOOL isWifiOK = [[AFNetworkReachabilityManager sharedManager] isReachableViaWiFi];
    //BOOL is3GOK = [[AFNetworkReachabilityManager sharedManager]isReachableViaWWAN];
    //网络有问题
    if(isOK == NO && canCHeckNetwork == YES){
        NSError *error = [NSError errorWithDomain:@"网络错位" code:100 userInfo:nil];
        cb(nil, nil,error);
        return;
    }
    
    //2..实现解析
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:urlpath parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) {
        //成功 cb是对方传递过来的对象 这里是直接调用
        NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
        cb(responseObject, obj ,nil);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        //失败
        cb(nil, nil ,error);
    }];
};
@end

   

//2.调用方式
-(void)testAFNetworking{
    NSString *urlPath = @"http://10.0.8.8/sns/my/user_list.php";
    NSDictionary *params = @{@"page" : @"10"};
    [MyHttpDownLoad download:urlPath param:params finish:^(NSData *data,NSDictionary *obj, NSError *error) {
        if (error == nil) {
            //obj即为解析后的数据.
            NSLog(@"parase my download json is %@",obj);
        }else{
            UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"网络状态" message:@"亲 网络不给力" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [av show];
        }
    }];
}
相关文章
相关标签/搜索