AFNetworking 3.0的基本使用(自己做项目总结的)
来源:互联网 发布:程序员工作量化kpi 编辑:程序博客网 时间:2024/06/18 13:30
AFNetworking 无外乎就是这几种使用方法,一般掌握下面几种方法就够用了,自己做项目总结的,对你有帮助的支持下!!
一、实时监测网络状态
可以看到很多app都会有一个功能,当用户的网络发生变化时会出现相应的提醒。AFNetworking提供了一个方法很简单的实现了这一功能。
// 实时监视网络状态的变化
- (void) observeNetworkState {
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"无法识别的网络");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"没有网络");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"移动网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI网络");
break;
default:
break;
}
}];
[manager startMonitoring];
}
可以看到上面的代码 网络状态status有四种:
AFNetworkReachabilityStatusUnknown 无法识别的网络
AFNetworkReachabilityStatusNotReachable 无网络
AFNetworkReachabilityStatusReachableViaWWAN 移动网络
AFNetworkReachabilityStatusReachableViaWiFi wifi网络
当网络状态发生变化时,代码会自动走block,通过switch 来区分不同网络状态系统应该做上面操作。
二、GET 和POST请求
// GET请求方法
-(void) getRequest {
// 启动系统风火轮
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSString *domainStr = @"http://c.m.163.com/nc/article/headline/T1348647909107/0-20.html";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//以get的形式提交,只需要将上面的请求地址给GET做参数就可以
[manager GET:domainStr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
// 下载进度
NSLog(@"进度 - %f", downloadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 隐藏系统风火轮
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
//json解析
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"---获取到的json格式的字典--%@",resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
// 解析失败隐藏系统风火轮(可以打印error.userInfo查看错误信息)
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];
}
// POST请求方法
-(void)postRequestData{
// 启动系统风火轮
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
//接口
NSString *domainStr = @"xxxxxxxxxxxxx";
//假如需要提交给服务器的参数是key=1,class_id=100
//创建一个可变字典
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典里面添加需要提交的参数
[parametersDic setObject:@"1" forKey:@"key"];
[parametersDic setObject:@"100" forKey:@"class_id"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//以post的形式提交,POST的参数就是上面的域名,parameters的参数是一个字典类型,将上面的字典作为它的参数
[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
// 下载进度
NSLog(@"进度 - %f", uploadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 隐藏系统风火轮
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
//json解析
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"---获取到的json格式的字典--%@",resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 解析失败隐藏系统风火轮(可以打印error.userInfo查看错误信息)
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];
}
三、下载操作
看到网上写的教程,很多都是错误的,自己琢磨了一下午才在github上找到了解决的办法。
下面演示的是下载一个mp3文件,通过此方法可以实时监测下载进度,可根据需求决定是否添加下载进度条。
- (void)downLoad{
//1.创建管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.确定请求的URL地址
NSURL *url = [NSURL URLWithString:@"http://yinyueshiting.baidu.com/data2/music/53333773/53333773.mp3?xcode=688e9c2348dace57e4d6351b3c1b445d"];
//3.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//4.下载任务
NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
//打印下下载进度
// @property int64_t totalUnitCount; 需要下载文件的总大小
// @property int64_t completedUnitCount; 当前已经下载的大小
NSLog(@"%lf",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//下载地址
NSLog(@"默认下载地址:%@",targetPath);
// 获取documents路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 自己为文件取一个名字ddd.mp3
// NSString *path2 = [path stringByAppendingString:@"/ddd.mp3"];
// 根据下载的文件自带的名字response.suggestedFilename
// 拼接文件下载存放路径
NSString *path2 = [path stringByAppendingPathComponent:response.suggestedFilename];
NSURL *url = [NSURL fileURLWithPath:path2];
return url;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
//下载完成调用的方法 NSLog(@"下载完成:");
NSLog(@"=====%@--%@",response,filePath);
}];
//开始启动任务
[task resume];
}
下载完成在沙盒中可以看到歌曲已经下载下来。
如果这篇文章对您有一丢丢帮助 请给我点个心哦。
未完待续。。。。。
- AFNetworking 3.0的基本使用(自己做项目总结的)
- AFNetworking 3.0的基本使用
- AFNetWorking的基本使用
- AFNetWorking的基本使用
- AFNetWorking的使用总结
- Afnetworking的基本使用介绍
- 搭建SSH框架(自己做项目时的总结)
- 微信支付(自己做项目总结的)
- 支付宝支付(自己做项目总结的)
- AFNetWorking 3.0 的基本用法
- 自己总结的git基本使用操作
- AFNetworking 3.0的使用
- AFNetworking网络框架的基本使用
- iOS开发中AFNetworking的基本使用
- AFNetworking的原理与基本使用
- AFNetworking的原理与基本使用
- AFNetworking的原理与基本使用
- 自己平时在做项目时候的一些总结
- POJ3262——Protecting the Flowers(贪心)
- 封装一个生成分页SQL
- 五种方式让你在java中读取properties文件内容不再是难题
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
- Ubuntu下面包依赖损坏的解决unmet dependencies
- AFNetworking 3.0的基本使用(自己做项目总结的)
- Facebook面试题 check for subText in input text's subarray.
- Remote Notification (一)
- 自定义View之组合控件
- NoSQL 数据库概览及其与 SQL 语法的比较
- ios AFNetworking支持https请求
- [绍棠] Xcode编译遇到bitcode问题
- Tomcat 配置详解及优化
- Android 多种方式正确的加载图像,有效避免oom