AFNetworking学习的那些事(一)

首先把我封装的session请求献上

1.BaseRequest.h

//网络请求的基类
// POST 、 GET 、 DELETE、PUT、HEADER、TRACE、 OPTION

@interface BaseRequest : NSObject
//POST请求方法

+(void)postWithURL:(NSString *)url para:(NSDictionary *)para callBack: (void (^)(NSData* data, NSError* error))callBack;

// 提示名: (参数类型)参数名
+(void)getWithURL: (NSString *)url para:(NSDictionary *)para callBack: (void (^)(NSData* data, NSError* error))callBack;

//DELETE 类似于GET     PUT类似于POST

@end

BaseRequest.m

+(void)postWithURL:(NSString *)url para:(NSDictionary *)para callBack:(void (^)(NSData *, NSError *))callBack {
    //拼接url的IP地址,资源路径、资源参数
    NSMutableString *urlStr = [[NSMutableString alloc]initWithString:url];

    [urlStr appendString: [self paraToString:para]];

    NSURL *URL = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    request.HTTPMethod = @"POST";

    //当请求的资源参数数据过大,不能放在资源参数部分时,或者为了不暴露接口的API将相关的请求参数放到请求体中。
    request.HTTPBody = [NSJSONSerialization dataWithJSONObject:para options:NSJSONWritingPrettyPrinted error:nil];          //返回值为NSData
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //请求响应的回调 block
        if (!error) {
            callBack(data,error);
//            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];

    [task resume];
}


+(void)getWithURL:(NSString *)url para:(NSDictionary *)para callBack:(void (^)(NSData *, NSError *))callBack {
    //拼接url的IP地址,资源路径、资源参数
    NSMutableString *urlStr = [[NSMutableString alloc]initWithString:url];

    [urlStr appendString: [self paraToString:para]];

    NSURL *URL = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    request.HTTPMethod = @"GET";

    //当请求的资源参数数据过大,不能放在资源参数部分时,或者为了不暴露接口的API将相关的请求参数放到请求体中。
    request.HTTPBody = [NSJSONSerialization dataWithJSONObject:para options:NSJSONWritingPrettyPrinted error:nil];          //返回值为NSData
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //请求响应的回调 block
        if (!error) {
            callBack(data,error);
//            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];

    [task resume];
}


//将para字典拼接为资源参数部分
+(NSString *)paraToString: (NSDictionary *)para {
    NSMutableString *str = [NSMutableString stringWithString:@"?"];

    for (NSString *key in para.allKeys) {
        [str appendFormat:@"%@=%@&",key,para[key]];
    }
    if ([str hasSuffix:@"&"]){
        //删除多余的& 连接符
        [str deleteCharactersInRange:NSMakeRange(str.length - 1, 1)];
    }

    //如果资源中含有中文或其他等特殊字符时进行Unicode编码
    NSString *paraStr = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
    return paraStr;
}

@end

这里写图片描述

str的打印结果 是这样,并经过json转化

{
“result”: {
“areaid”: “410611”,
“email”: “nytyg@qq.com”,
“id”: 35,
“loginflag”: “1”,
“mobile”: “”,
“name”: “互动体验中心”,
“phone”: “”,
“photo”: “http://biot.365960.cn/image/user/35/1483577527069.png“,
“remarks”: “”,
“roleid”: “9”,
“usertype”: “2”
},
“code”: 0,
“message”: “登录成功”,
“error”: false
}

打印的经过NSJSONSerialization 解析的 为 NSDictionary对象类型

{
code = 0;
error = 0;
message = “\U767b\U5f55\U6210\U529f”;
result = {
areaid = 410611;
email = “nytyg@qq.com”;
id = 35;
loginflag = 1;
mobile = “”;
name = “\U4e92\U52a8\U4f53\U9a8c\U4e2d\U5fc3”;
phone = “”;
photo = “http://biot.365960.cn/image/user/35/1483577527069.png“;
remarks = “”;
roleid = 9;
usertype = 2;
};
}

不同之处在于 后者的非数字型键值没有双引号,不能进行json转化

通过AFN来获取数据

这里写图片描述

在这里我们打印的 AFN返回的数据responseObject,打印结果

{
code = 0;
error = 0;
message = “\U767b\U5f55\U6210\U529f”;
result = {
areaid = 410611;
email = “nytyg@qq.com”;
id = 35;
loginflag = 1;
mobile = “”;
name = “\U4e92\U52a8\U4f53\U9a8c\U4e2d\U5fc3”;
phone = “”;
photo = “http://biot.365960.cn/image/user/35/1483577527069.png“;
remarks = “”;
roleid = 9;
usertype = 2;
};
}

那么这边同上边打印NSDictionary的结果,所以

1.AFN网络请求方法中返回的responseObject 为 已经转化成为NSDictionaryNSArray的对象, 省了 一步将请求下来的data转化为NSDictionaryNSArray
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值