美文网首页
iOS网络请求AFNetworking

iOS网络请求AFNetworking

作者: ZIM东东 | 来源:发表于2017-05-24 11:59 被阅读74次

AFNetworking导入工程
网络请求类名NetworkTool继承AFHTTPSessionManager
NetworkTool.h

#import "AFHTTPSessionManager.h"

@interface NetworkTool : AFHTTPSessionManager

/**
 *  网络请求工具类全局访问点
 *
 *  @return AFHTTPSessionManager的实例
 */
+ (instancetype)sharedNetworkTool;

/**
 *  网络请求工具类请求的主方法
 *
 *  @param URLString 请求地址
 *  @param success   成功的回调
 *  @param failure     失败的回调
 */

+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters 
                  success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure;


@end

NetworkTool.m

#import "NetworkTool.h"
#import "AFNetworking.h"

@implementation NetworkTool

+ (instancetype)sharedNetworkTool
{
    static NetworkTool *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 设置相对路径
        NSURL *BaseURL = [NSURL URLWithString:@""];
        // 实例化Manager
        instance = [[self alloc] initWithBaseURL:BaseURL];
        
        // 增加AFN支持的文件类型
        instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
    });
    
    return instance;
}

//网络请求方法
+ (void)POSTWithURLString:(NSString *)URLString parameters:(NSMutableDictionary *)parameters 
  success:(void(^)(id responseObject))success faile:(void(^)(NSError *error))failure
{
  //大P为key,由接口决定,也可不需要
    NSData *data = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
    NSString *JsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSMutableDictionary *parameterDic = [[NSMutableDictionary alloc]init];
    [parameterDic setObject:JsonStr forKey:@"P"];
    
    AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer.timeoutInterval = 15.f;
    sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

    [sessionManager POST:URLString parameters:parameterDic progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog((@"\n[函数名:%s]\n" "[行号:%d]\n" "参数%@\n"), __FUNCTION__, __LINE__,parameters);
        NSLog((@"\n[函数名:%s]\n" "[行号:%d]\n" "地址%@\n"), __FUNCTION__, __LINE__,URLString);
        NSLog((@"\n[函数名:%s]\n" "[行号:%d]\n" "返回%@\n"), __FUNCTION__, __LINE__,responseObject);

        success(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error);
        NSLog((@"该接口返回错误==%@\n参数是==%@\n错误是==%@\n"),URLString,parameters,error);
        [self testNetwork];//查询当前网络
    }];

}

+(void)testNetwork
{
    // 监测网络环境
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    /*
     status
     AFNetworkReachabilityStatusUnknown          = -1, 不知道监测的是什么
     AFNetworkReachabilityStatusNotReachable     = 0,  没有检测到网络
     AFNetworkReachabilityStatusReachableViaWWAN = 1,  蜂窝网
     AFNetworkReachabilityStatusReachableViaWiFi = 2,  WIFI
     */
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        if (status == 0) {
            //没有检测到网络!
        }
    }];
    [manager startMonitoring];
}

相关文章

网友评论

      本文标题:iOS网络请求AFNetworking

      本文链接:https://www.haomeiwen.com/subject/xmnnxxtx.html