AFNetworking简单的二次封装
2018-05-19 本文已影响49人
今晚月色
初次封装,还有待改进,希望大家批评!
WDNetWorking.h文件
#import <Foundation/Foundation.h>
// 网络请求Block
typedef void(^SuccessBlock)(id dicData);
typedef void(^FaliedBlock)(id dicDta);
@interface WDNetWorking : NSObject
/**
单例
@return [[self alloc] init];
*/
+ (instancetype)share;
// 检测网络
+ (void)monitorNetworking;
/**
Post请求
@param url 接口名称
@param isNeed 是否需要加载动画
@param postDic 参数字典
@param successBlock 成功回调
@param faliedBlock 失败回调
*/
+ (void)PostRequestWithUrl : (NSString *)url
andNeedSVP : (BOOL)isNeed
andPostDic : (NSDictionary *)postDic
andSuccessBlock : (SuccessBlock)successBlock
andFaliedBlock : (FaliedBlock)faliedBlock;
/**
Get请求
@param url 接口名称
@param isNeed 是否需要加载动画
@param postDic 参数字典
@param successBlock 成功回调
@param faliedBlock 失败回调
*/
+ (void)GetRequestWithUrl : (NSString *)url
andNeedSVP : (BOOL)isNeed
andPostDic : (NSDictionary *)postDic
andSuccessBlock : (SuccessBlock)successBlock
andFaliedBlock : (FaliedBlock)faliedBlock;
/**
单图上传
@param url 接口
@param image 图片
@param isNeed 是否需要加载动画
@param successBlock 成功回调
*/
+ (void)requestDataUploadWithUrl : (NSString *)url
Image : (UIImage *)image
andNeedSVP : (BOOL)isNeed
andSuccessBlock : (SuccessBlock)successBlock;
/**
多图上传
@param url 接口
@param ImagesArray 图片数组
@param isNeed 是否需要加载动画
@param successBlock 成功回调
*/
+ (void)multPictureUploadWithWithUrl : (NSString *)url
ImagesArray : (NSMutableArray *)ImagesArray
andNeedSVP : (BOOL)isNeed
andSuccessBlock : (SuccessBlock)successBlock;
@end
WDNetWorking.m文件
#import "WDNetworking.h"
#import <AFNetworking.h>
#define CurrentWindows [UIApplication sharedApplication].keyWindow
#define WD_SCRWIDTH [UIScreen mainScreen].bounds.size.width
#define WD_SCRHEIHGT [UIScreen mainScreen].bounds.size.height
@interface WDNetWorking ()
// AFNetWorking
@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
@end
// 创建静态对象 防止外部访问
static WDNetWorking *_instance;
@implementation WDNetWorking
+ (instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
// 一次函数
dispatch_once(&onceToken, ^{
if (_instance == nil) {
_instance = [super allocWithZone:zone];
}
});
return _instance;
}
/**
单例
@return [[self alloc] init];
*/
+ (instancetype)share{
return [[self alloc] init];
}
#pragma mark --- getter && setter
/**
AFHTTPSessionManager
@return AFHTTPSessionManager
*/
- (AFHTTPSessionManager *)sessionManager{
if(!_sessionManager){
_sessionManager = [AFHTTPSessionManager manager];
// 设置请求时间
[_sessionManager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
_sessionManager.requestSerializer.timeoutInterval = 3.f;
[_sessionManager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
_sessionManager.responseSerializer.acceptableContentTypes = [_sessionManager.responseSerializer.acceptableContentTypes setByAddingObjectsFromSet:[NSSet setWithObjects:@"text/html",@"text/plain",@"application/json",nil]];
_sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
_sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
}
return _sessionManager;
}
/**
Post请求
@param url 接口名称
@param isNeed 是否需要加载动画
@param postDic 参数字典
@param successBlock 成功回调
@param faliedBlock 失败回调
*/
+ (void)PostRequestWithUrl : (NSString *)url
andNeedSVP : (BOOL)isNeed
andPostDic : (NSDictionary *)postDic
andSuccessBlock : (SuccessBlock)successBlock
andFaliedBlock : (FaliedBlock)faliedBlock{
// 如果有动画,动画启动
[[WDNetWorking share].sessionManager POST:url
parameters:postDic
progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// data 转 字典
NSDictionary * dict = [WDNetWorking dataConvertoDictionaryWith:responseObject];
// 如果有动画,动画停止
if(dict){
if([dict[@"code"] integerValue] != 0){
[[WDNetWorking share] showTostWithCode:dict[@"code"]
andMsgDic:dict];
faliedBlock(dict);
}else{
successBlock(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 如果有动画,动画停止
[[WDNetWorking share] showErrorTostWithErrorCode:error.code];
}];
}
/**
Get请求
@param url 接口名称
@param isNeed 是否需要加载动画
@param postDic 参数字典
@param successBlock 成功回调
@param faliedBlock 失败回调
*/
+ (void)GetRequestWithUrl : (NSString *)url
andNeedSVP : (BOOL)isNeed
andPostDic : (NSDictionary *)postDic
andSuccessBlock : (SuccessBlock)successBlock
andFaliedBlock : (FaliedBlock)faliedBlock{
// 如果有动画,动画启动
[[WDNetWorking share].sessionManager GET:url
parameters:postDic
progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// data 转 字典
NSDictionary * dict = [WDNetWorking dataConvertoDictionaryWith:responseObject];
// 如果有动画,动画停止
if(dict){
if([dict[@"code"] integerValue] != 0){
[[WDNetWorking share] showTostWithCode:dict[@"code"]
andMsgDic:dict[@"msg"]];
faliedBlock(dict);
}else{
successBlock(dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 如果有动画,动画停止
[[WDNetWorking share] showErrorTostWithErrorCode:error.code];
}];
}
/**
单图上传
@param url 接口
@param image 图片
@param isNeed 是否需要加载动画
@param successBlock 成功回调
*/
+ (void)requestDataUploadWithUrl : (NSString *)url
Image : (UIImage *)image
andNeedSVP : (BOOL)isNeed
andSuccessBlock : (SuccessBlock)successBlock{
// 如果有动画,动画启动
[WDNetWorking share].sessionManager.requestSerializer.timeoutInterval = 20.f;
[[WDNetWorking share].sessionManager POST:url
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData){
NSString *fileName = [NSString stringWithFormat:@"%@.png",[WDNetWorking currentDate]];
NSData *imageData = UIImageJPEGRepresentation(image, 1);
double scaleNum = (double)300*1024/imageData.length;
imageData = scaleNum < 1 ? UIImageJPEGRepresentation(image, scaleNum) : UIImageJPEGRepresentation(image, 0.5);
[formData appendPartWithFileData:imageData
name:@"file"
fileName:fileName
mimeType:@"image/jpg/png/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 如果有动画,动画停止
successBlock([WDNetWorking dataConvertoDictionaryWith:responseObject]);
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 如果有动画,动画停止
[[WDNetWorking share] showErrorTostWithErrorCode:error.code];
}];
}
/**
多图上传
@param url 接口
@param ImagesArray 图片数组
@param isNeed 是否需要加载动画
@param successBlock 成功回调
*/
+ (void)multPictureUploadWithWithUrl : (NSString *)url
ImagesArray : (NSMutableArray *)ImagesArray
andNeedSVP : (BOOL)isNeed
andSuccessBlock : (SuccessBlock)successBlock{
// 如果有动画,动画启动
[WDNetWorking share].sessionManager.requestSerializer.timeoutInterval = 20;
[[WDNetWorking share].sessionManager POST:url
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
for (int i = 0; i < ImagesArray.count; i++) {
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:ImagesArray[i]]];
NSString *dateString = [WDNetWorking currentDate];
NSString *fileName = [NSString stringWithFormat:@"%@.png",dateString];
NSData *imageData = UIImageJPEGRepresentation(image, 1);
double scaleNum = (double)300*1024/imageData.length;
imageData = scaleNum < 1 ? UIImageJPEGRepresentation(image, scaleNum) : UIImageJPEGRepresentation(image, 0.1);
[formData appendPartWithFileData:imageData
name:@"files"
fileName:fileName
mimeType:@"image/jpg/png/jpeg"];
}
}progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"%@",uploadProgress);
}success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 如果有动画,动画停止
successBlock([WDNetWorking dataConvertoDictionaryWith:responseObject]);
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 如果有动画,动画停止
[[WDNetWorking share] showErrorTostWithErrorCode:error.code];
}];
}
/**
获取当前时间
@return 字符串
*/
+ (NSString *)currentDate{
NSDate *date = [NSDate date];
NSDateFormatter *formormat = [[NSDateFormatter alloc]init];
[formormat setDateFormat:@"HH-mm-ss-sss"];
return [formormat stringFromDate:date];
}
/**
字典转json字符串方法
@param dict 字典
@return 字符串
*/
+ (NSString *)convertToJsonData:(NSDictionary *)dict{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
options:NSJSONWritingPrettyPrinted
error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"字典转json字符串错误:%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData
encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@" "
withString:@""
options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStr replaceOccurrencesOfString:@"\n"
withString:@""
options:NSLiteralSearch range:range2];
return mutStr;
}
/**
data转字典
@param data data
*/
+ (NSDictionary *)dataConvertoDictionaryWith:(id)data{
return [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves
error:nil];
}
#pragma mark - ------------- 监测网络状态 -------------
+ (void)monitorNetworking
{
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -1:
NSLog(@"未知网络");
break;
case 0:
NSLog(@"网络不可达");
break;
case 1:
{
NSLog(@"GPRS网络");
}
break;
case 2:
{
NSLog(@"wifi网络");
}
break;
default:
break;
}
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
NSLog(@"有网");
}else{
NSLog(@"没网");
}
}];
}
/**
根据返回的错误code进行判断
@param errorCode 错误代码
*/
- (void)showErrorTostWithErrorCode:(NSInteger)errorCode{
// 根据返回的code值 添加提示弹窗
}
/**
根据返回的code进行判断
@param code 非0的状态码
*/
- (void)showTostWithCode:(NSString *)code
andMsgDic:(NSDictionary *)msgDic{
NSInteger CODE = [code integerValue];
if(CODE == 1001){
// 异地登录--token失效
// 提示:您的账号在别地登录,请重新登录
[self performSelector:@selector(signOut) withObject:nil afterDelay:1.0];
}else{
// 提示 服务器返回信息
}
}
- (void)signOut{
// TODO: 清楚用户信息、退出到登录页面
}
@end