AFNetworking 3.0的使用

作者: 夜凉听风雨 | 来源:发表于2016-09-19 10:22 被阅读220次

下面介绍一下iOS开发中几种最常用到的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的使用

    本文链接:https://www.haomeiwen.com/subject/cwngettx.html