封裝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];
        }
    }];
}
相關文章
相關標籤/搜索