AFNetWorking 封裝

jopen 8年前發布 | 9K 次閱讀 iOS開發 移動開發

//
//  AFClient.h
//  Soufu580
//
//  Created by Cloud on 15/12/18.
//  Copyright ? 2015年 Soufu580. All rights reserved.
//

import <Foundation/Foundation.h>

import "AFHTTPSessionManager.h"

@interface AFClient : AFHTTPSessionManager

/**

  • 返回該類的一個實例 *
  • @return client; */ +(instancetype)getHttpClient;

@end


// // AFClient.m // Soufu580 // // Created by Cloud on 15/12/18. // Copyright ? 2015年 Soufu580. All rights reserved. //

/**

  • 單例的 AFHTTPSessionManager

    */

import "AFClient.h"

static NSString *const BASEURL = @"

@implementation AFClient

  • (instancetype)getHttpClient { static AFClient *client = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
      client = [[AFClient alloc] initWithBaseURL:[NSURL URLWithString:BASEURL]];
      client.responseSerializer = [AFHTTPResponseSerializer serializer];
      AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
      securityPolicy.allowInvalidCertificates = YES;
      client.securityPolicy = securityPolicy;
      client.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil ,nil];
});
return client;

}

@end


// // BHttpClient.h // Soufu580 // // Created by Cloud on 15/12/16. // Copyright ? 2015年 Soufu580. All rights reserved. //

import <Foundation/Foundation.h>

@interface HttpUtil : NSObject

+(void) httpGet:(NSString )urlPath param:(NSDictionary ) dict finish:(void (^) (NSData date, NSDictionary obj,NSError error)) cb; +(void) httpPost:(NSString )urlPath param:(NSDictionary ) dict finish:(void (^) (NSData date, NSDictionary obj,NSError error)) cb;

@end


// // BHttpClient.m // Soufu580 // // Created by Cloud on 15/12/16. // Copyright ? 2015年 Soufu580. All rights reserved. //

import "HttpUtil.h"

import "AFNetworking.h"

include "NsUtil.h"

import "AFClient.h"

import "BaseModel.h"

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

@implementation HttpUtil

+(void) httpGet:(NSString )urlpath param:(NSDictionary )dict finish:(void (^)(NSData ,NSDictionary obj, NSError *))cb{

//1..檢查網絡連接(蘋果公司提供的檢查網絡的第三方庫 Reachability)
//AFN 在 Reachability基礎上做了一個自己的網絡檢查的庫, 基本上一樣

[self checkNetWork];
//只能在監聽完善之后才可以調用
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]; [[AFClient getHttpClient] GET:urlpath parameters:dict success:^(NSURLSessionDataTask task, id responseObject) { //成功 cb是對方傳遞過來的對象 這里是直接調用

    NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    cb(responseObject, [NsUtil replaceUnicode:[NsUtil  DataTOjsonString:obj]],nil);

    // cb(responseObject, [self replaceUnicode:[self DataTOjsonString:@""]],nil);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    //失敗
    cb(nil, nil ,error);
}];

};

+(void) httpPost:(NSString )urlpath param:(NSDictionary )dict finish:(void (^)(NSData ,NSDictionary obj, NSError *))cb{

//1..檢查網絡連接(蘋果公司提供的檢查網絡的第三方庫 Reachability)
//AFN 在 Reachability基礎上做了一個自己的網絡檢查的庫, 基本上一樣

[self checkNetWork];
//只能在監聽完善之后才可以調用
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];

 [[AFClient getHttpClient] POST:urlpath parameters:dict success:^(NSURLSessionDataTask *task, id responseObject) {
    //成功 cb是對方傳遞過來的對象 這里是直接調用
   // NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
     NSError *err;
     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject
                                                         options:NSJSONReadingMutableContainers
                                                           error:&err];

     BaseModel *baseModel = [[BaseModel alloc] initWithDictionary:dic];


     NSLog(@"basenaem: %@",baseModel.msg);
     //cb(responseObject, [NsUtil replaceUnicode:[NsUtil  DataTOjsonString:obj]],nil);

// cb(responseObject, [self replaceUnicode:[self DataTOjsonString:@""]],nil); } failure:^(NSURLSessionDataTask task, NSError error) { //失敗 cb(nil, nil ,error); }]; };

+(BOOL ) checkNetWork{

if (isFirst == NO) {
    //網絡只有在startMonitoring完成后才可以使用檢查網絡狀態
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        canCHeckNetwork = YES;
    }];
    isFirst = YES;
}

return canCHeckNetwork;

}

@end</pre>



//調用
-(void) testHttpMsPost{

    NSString *urlPath = @"xxx/mmm.do";
    NSDictionary*dict = @{@"type":@"1", @"cityId":@"310100",@"userId":@"1e55ff20a7264a0a9a3ebe02b066a5f8"};
    [HttpUtil httpPost:urlPath param:dict 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];
        }
    }];

}



來自: http://my.oschina.net/xiahuawuyu/blog/547541

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!