iOS--简单封装 AFNetworking网络请求
2016-12-27 本文已影响558人
TenMios
1. 封装的原因:
- 如果我们用原生的AFNetworking 当然可以。可是你有没有想过。
- 如果你下次更新AFN的时候。它的网络请求方法改了要怎么办呢?
- 所以我们只要封装好AFN的代码,下次我要改网络请求的时候就直接在这个类里面写几句代码就可以了。
- 如果你没有封装。就要改所有的请求。一百多个地方就要改一百多次。那你还不累死。
- 聪明人要懂的给自己,减少冗余的代码!我希望那个人是你。
2. 封装代码的 .h 文件
2.1 首先 你得新建一个工具类 继承自NSObject
.h文件代码如下 可以直接复制使用
//
// MOLoadHttpsData.h
// AJ King
//
// Created by 林杰 on 2016/12/27.
// Copyright © 2016年 TenMios. All rights reserved.
// AFN 网络请求框架的工具类
/**
* 封装的原因:下次我要改网络请求的时候就直接在这个类里面写一句代码就可以了。
* 而你没有封装。。就要改所有的请求。一百多个地方就要改一百多次。
*/
#import <Foundation/Foundation.h>
typedef void (^SuccessBlock) (id responseObject);
typedef void (^FailedBlock) (id error);
@interface MOLoadHttpsData : NSObject
/** Post 请求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;
/** Get 请求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock;
@end
3. 封装代码的 .m 文件
//
// MOLoadHttpsData.m
// AJ King
//
// Created by 林杰 on 2016/12/27.
// Copyright © 2016年 TenMios. All rights reserved.
//
#import "MOLoadHttpsData.h"
@implementation MOLoadHttpsData
/** Post 请求 */
+(void)PostHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
[manager POST:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/** 这里是处理事件的回调 */
if (successBlock) {
successBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
/** 这里是处理事件的回调 */
if (failureBlock) {
failureBlock(error);
}
}
];
}
/** Get 请求 */
+(void)GetHttpDataWithUrlStr:(NSString *)url Dic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock FailureBlock:(FailedBlock)failureBlock{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"text/plain",nil];
[manager GET:url parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/** 这里是处理事件的回调 */
if (successBlock) {
successBlock(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
/** 这里是处理事件的回调 */
if (failureBlock) {
failureBlock(error);
}
}
];
}
@end
4. 如何使用呢?
把封装好的 工具类 放在PCH文件中。 这样以后用到的时候也方便
[MOLoadHttpsData GetHttpDataWithUrlStr:(这里填写你要请求的接口地址) Dic:(这里填写你要提交的参数) SuccessBlock:^(id responseObject) {
/**
** 在这里 可以获取到成功返回的请求数据
**/
} FailureBlock:^(id error) {
/**
** 在这里 可以获取到失败返回的请求数据
**/
}];
工程实例 : (仅供参考)
// 中间
[SVProgressHUD showWithStatus:@"loading..."];
[MOLoadHttpsData GetHttpDataWithUrlStr:HomeMidURL Dic:nil SuccessBlock:^(id responseObject) {
NSDictionary *data = responseObject[@"data"];
self.mids = [MIOMidModel
mj_objectArrayWithKeyValuesArray:data[@"top"]];
[self.collectionView reloadData];//加载完成 刷新数据
[SVProgressHUD dismiss];
} FailureBlock:^(id error) {
// 友情提示
[SVProgressHUD showErrorWithStatus:@"sorry ! please try again later"];
}];