AFNetWorking请求完成数据后可以直接进行更新,它里面已经封装好自动回到主线程更新UI
使用AFNetWorking进行数据请求,以下为几种返回数据格式设定:
//
声明(默认):服务器返回的
json
数据,因为
json
格式比较规范,他会帮你解析成字典或数组
session.
responseSerializer
= [
AFJSONResponseSerializer
serializer
];
// 声明:服务器返回的是 XML 数据,我们自己进行解析
session. responseSerializer = [ AFXMLParserResponseSerializer serializer ];
// 声明:不要对服务器返回的数据进行解析,直接返回 data 就行(如果是文件下载,使用这个(图片等))
// 声明:服务器返回的是 XML 数据,我们自己进行解析
session. responseSerializer = [ AFXMLParserResponseSerializer serializer ];
// 声明:不要对服务器返回的数据进行解析,直接返回 data 就行(如果是文件下载,使用这个(图片等))
session.responseSerializer = [AFHTTPResponseSerializer serializer];
AFNetWorking网络请求数据步骤
1、创建管理者
2、封装请求参数
3、获得url字符串并发送get或post请求
若遇到解析不成功,可打印出error查看错误信息,可通过下方方式解决(AFNetWorking新版本)
二、数据上传:(使用的类:
AFHTTPRequestOperationManager)使用Post请求
AFHTTPRequestOperationManager
*manager = [
AFHTTPRequestOperationManager
manager
];
NSString *urlStr = @"" ;
NSMutableDictionary *dic = [ NSMutableDictionary dictionary ];
[manager POST :urlStr parameters :dic constructingBodyWithBlock :^( id < AFMultipartFormData > _Nonnull formData) {
/*
fileURL : 需要上传的文件的 URL 路径
name : 服务器那边接收文件所用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的类型
*/
// [formData appendPartWithFileURL:<#(nonnull NSURL *)#> name:@"file" fileName:<#(nonnull NSString *)#> mimeType:<#(nonnull NSString *)#> error:nil]
/*
fileURL : 需要上传的文件的具体数据
name : 服务器那边接收文件所用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的类型
*/
// [formData appendPartWithFileData:<#(nonnull NSData *)#> name:<#(nonnull NSString *)#> fileName:<#(nonnull NSString *)#> mimeType:<#(nonnull NSString *)#>]
} success :^( AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog ( @" 上传成功 " );
} failure :^( AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSString *urlStr = @"" ;
NSMutableDictionary *dic = [ NSMutableDictionary dictionary ];
[manager POST :urlStr parameters :dic constructingBodyWithBlock :^( id < AFMultipartFormData > _Nonnull formData) {
/*
fileURL : 需要上传的文件的 URL 路径
name : 服务器那边接收文件所用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的类型
*/
// [formData appendPartWithFileURL:<#(nonnull NSURL *)#> name:@"file" fileName:<#(nonnull NSString *)#> mimeType:<#(nonnull NSString *)#> error:nil]
/*
fileURL : 需要上传的文件的具体数据
name : 服务器那边接收文件所用的参数名
fileName : (告诉服务器)所上传文件的文件名
mimeType : 所上传文件的类型
*/
// [formData appendPartWithFileData:<#(nonnull NSData *)#> name:<#(nonnull NSString *)#> fileName:<#(nonnull NSString *)#> mimeType:<#(nonnull NSString *)#>]
} success :^( AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSLog ( @" 上传成功 " );
} failure :^( AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
NSLog(@"上传失败
");
}];
}
三、网络状态监控(使用的类:
AFNetworkReachabilityManager
)
AFNetworkReachabilityManager
*manager = [
AFNetworkReachabilityManager
sharedManager
];
[manager setReachabilityStatusChangeBlock :^( AFNetworkReachabilityStatus status) {
// 当网络状态发生改变的时候调用这个 block
switch (status) {
case AFNetworkReachabilityStatusReachableViaWiFi :
NSLog ( @"wifi" );
break ;
case AFNetworkReachabilityStatusReachableViaWWAN :
NSLog ( @" 自带 " );
break ;
case AFNetworkReachabilityStatusNotReachable :
NSLog ( @" 无网络 " );
break ;
case AFNetworkReachabilityStatusUnknown :
NSLog ( @" 未知网络 " );
break ;
default :
break ;
}
}];
[manager setReachabilityStatusChangeBlock :^( AFNetworkReachabilityStatus status) {
// 当网络状态发生改变的时候调用这个 block
switch (status) {
case AFNetworkReachabilityStatusReachableViaWiFi :
NSLog ( @"wifi" );
break ;
case AFNetworkReachabilityStatusReachableViaWWAN :
NSLog ( @" 自带 " );
break ;
case AFNetworkReachabilityStatusNotReachable :
NSLog ( @" 无网络 " );
break ;
case AFNetworkReachabilityStatusUnknown :
NSLog ( @" 未知网络 " );
break ;
default :
break ;
}
}];
[manager startMonitoring];