总结了一下AFN3.0封装,也借鉴了其他人总结的,整理如下,希望多交流,互相进步
//
// XJYSessionManager.h//
// Created by XJY on 16/10/17.
// Copyright © 2016年 XinJinYing. All rights reserved.
// #import <AFNetworking/AFNetworking.h> /**
* 宏定义请求成功的block
*
* @param responseObject 请求成功返回的数据
*/
typedef void(^XJYResponseSuccess)(NSURLSessionDataTask *task, id responseObject); /**
* 宏定义请求失败的block
*
* @param error 报错信息
*/
typedef void(^XJYResponseFail)(NSURLSessionDataTask *task, NSError *error); /**
* 上传或者下载的进度
*
* @param progress 进度
*/
typedef void(^XJYProgress)(NSProgress *progress); @interface XJYSessionManager : AFHTTPSessionManager //单例
+ (XJYSessionManager *)shareInstance; /**
* 普通get方法请求网络数据
*
* @param url 请求网址路径
* @param params 请求参数
* @param success 成功回调
* @param fail 失败回调
*/
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail; //判断网络状态
+ (XJYSessionManager *)haveNetWork; /**
* 普通post方法请求网络数据
*
* @param url 请求网址路径
* @param params 请求参数
* @param success 成功回调
* @param fail 失败回调
*/
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail; /**
* 普通路径上传文件
*
* @param url 请求网址路径
* @param params 请求参数
* @param filedata 文件
* @param name 指定参数名
* @param fileName 文件名(要有后缀名)
* @param mimeType 文件类型
* @param progress 上传进度
* @param success 成功回调
* @param fail 失败回调
*/ + (void)uploadWithURL:(NSString *)url
params:(NSDictionary *)params
fileData:(NSData *)filedata
name:(NSString *)name
fileName:(NSString *)fileName
mimeType:(NSString *)mimeType
progress:(XJYProgress)progress
success:(XJYResponseSuccess)success
fail:(XJYResponseFail)fail; /**
* 下载文件
*
* @param url 请求网络路径
* @param fileURL 保存文件url
* @param progress 下载进度
* @param success 成功回调
* @param fail 失败回调
*
* @return 返回NSURLSessionDownloadTask实例,可用于暂停继续,暂停调用suspend方法,重新开启下载调用resume方法
*/
+ (NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url savePathURL:(NSURL *)fileURL progress:(XJYProgress)progress success:(void (^)(NSURLResponse *, NSURL *))success fail:(void (^)(NSError *))fail; @end
//
// XJYSessionManager.m//
// Created by XJY on 16/10/17.
// Copyright © 2016年 XinJinYing. All rights reserved.
// #import "XJYSessionManager.h" static int const DEFAULT_REQUEST_TIME_OUT = ; @implementation XJYSessionManager #pragma mark - 实例化Manager
static XJYSessionManager *shareInstance = nil;
+ (XJYSessionManager *)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[self alloc] init];
});
return shareInstance;
} + (id)allocWithZone:(struct _NSZone *)zone
{
if (shareInstance == nil) {
shareInstance = [super allocWithZone:zone];
}
return shareInstance;
} - (id)copyWithZone:(NSZone *)zone
{
return shareInstance;
} - (instancetype)init
{
self = [super init];
if (self) {
//初始化一些参数
self.responseSerializer = [AFJSONResponseSerializer serializer];
self.requestSerializer = [AFJSONRequestSerializer serializer];
self.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", @"text/json", @"text/javascript",@"application/x-javascript",@"text/plain",@"image/gif",nil];
self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];
[[self requestSerializer] setTimeoutInterval:DEFAULT_REQUEST_TIME_OUT];
}
return self;
} #pragma mark - 判断使用什么网络
+ (XJYSessionManager *)haveNetWork
{
static NSString *const stringURL = @"https://www.baidu.com/";
NSURL *baseURL = [NSURL URLWithString:stringURL];
XJYSessionManager *manager = [[XJYSessionManager alloc] initWithBaseURL:baseURL];
NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"WWAN");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
{
NSLog(@"WiFi");
[operationQueue setSuspended:NO];
}
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"无网络");
if (kPLIOS7) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"亲,您没网啦" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:alertAction];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil]; } else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"亲,您没网啦" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alertView show];
} }
default:
[operationQueue setSuspended:YES];
break;
}
}];
//开始监控
[manager.reachabilityManager startMonitoring];
return manager;
} #pragma mark - 解析数据
+ (id)responseConfiguration:(id)responseObject
{
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
return dic;
} #pragma mark - GET
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - POST
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - 上传
+ (void)uploadWithURL:(NSString *)url params:(NSDictionary *)params fileData:(NSData *)filedata name:(NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType progress:(XJYProgress)progress success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:filedata name:name fileName:fileName mimeType:mimeType];
} progress:^(NSProgress * _Nonnull uploadProgress) { progress(uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - 下载
+ (NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url savePathURL:(NSURL *)fileURL progress:(XJYProgress)progress success:(void (^)(NSURLResponse *, NSURL *))success fail:(void (^)(NSError *))fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance]; NSURL *urlPath = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:urlPath];
NSURLSessionDownloadTask *downLoadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { progress(downloadProgress); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//下载后保存的路径
return [fileURL URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { if (error) {
fail(error);
} else {
success(response, filePath);
} }]; [downLoadTask resume];
return downLoadTask; }
@end

AFN3.0封装的更多相关文章

  1. 第六十二篇、AFN3.0封装网络请求框架,支持缓存

    1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...

  2. 基于NET 6.0 封装的 Fast.Framework

    Fast Framework 项目地址 https://gitee.com/China-Mr-zhong/Fast.Framework Author Mr-zhong Wechat 850856667 ...

  3. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  4. LXNetwork – 基于AF3.0封装的iOS网络请求库

    本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...

  5. Swift 2.0 封装图片折叠效果

    文/猫爪(简书作者)原文链接:http://www.jianshu.com/p/688c491580e3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 用Swift封装图片折叠效果 b ...

  6. 【转】Vue 2.0封装axios笔记

    前言 单页面应用大多采用前后端分离开发思路,我们知道,前端和后端交互有多中方式(服务器端渲染.Ajax.websocket等),今天我们主要讲解Ajax部分. 最近团队讨论了一下,Ajax 本身跟 V ...

  7. Struts2.0 封装请求数据和拦截器介绍

    1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...

  8. iOS-网络请求-AFN升级至AFN3.0

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  9. 分享一个基于EF5.0封装的BaseDAL

    public class BaseDAL<T> where T : class,new() { protected DbContext dbContext = DbContextFacto ...

随机推荐

  1. Android使用TextureView播放视频

    1.引言 如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到. 1).TextureView的兄弟SurfaceView 应用 ...

  2. C/C++,彩色图像小游戏。

    这里声明,这个游戏是由本人,在大一暑假自作的第二个小游戏,转载请注明原帖地址,谢谢! 所有图片都是我一个人用ps搞出来的,比较简单.........毕竟不是学图像制作的,请体谅!另外,图片 不放出来了 ...

  3. Oracle同义词+dblink的实际应用

    Oracle同义词+dblink的实际应用 业务需求:原数据库(10.2.0.4.0),新数据库(11.2.0.3) 由于程序的需求原因,现在需要把新库上的某个用户直接映射到老库用户下: 1. 备份原 ...

  4. LeetCode - 415. Add Strings

    Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...

  5. (二十一)WebGIS中鹰眼的实现思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 鹰眼功能是WebGIS中的一种常见功能,利用一些开源的框架实现 ...

  6. 使用idea debug多线程

    最近采用hystrix远程访问webservice, 遇到一个重定向303的exception,想要debug一下,发现打了断点后总是被跳过.想到hystrix异步线程的问题,于是想要debug就得支 ...

  7. 学习php中的正则表达式,PHP正则表达式基础

    语法格式:位于定界符"/"之间. 较为常用的元字符包括: “+”, “*”,以及 “?”. 其中, “+”元字符规定其前导字符必须在目标对象中连续出现一次或多次, “*”元字符规定 ...

  8. BizTalk Server 2016

    10月28日微软正式发布BizTalk第十个版本BizTalk Server 2016,陆续发布了Azure VM镜像.MSDN版本.开发者版本等.以下为BizTalk Server 2016 新特性 ...

  9. php语言实现的7种基本的排序方法

    今天总结了一下常用的7种排序方法,并用php语言实现. 直接插入排序 /* * 直接插入排序,插入排序的思想是:当前插入位置之前的元素有序, * 若插入当前位置的元素比有序元素最后一个元素大,则什么也 ...

  10. MySQL使用if判断

    select *,if(sva=1,"男","女") as ssva from taname where sva<>"" 12. ...