AFNetworking 常用方法

AFNetworking 常用方法

pod 引入

Podfile

pod 'AFNetworking', '~> 4.0'

VC

#import "AFNetworking.h"

GET 方法获取并显示图片

UIImageView *imageNetView = [UIImageView new];
[self.view addSubview: imageNetView];
self.ImageView = imageNetView;
imageNetView.frame = CGRectMake(200, 200, 200, 200);

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
/* 知识点1:设置AFN采用什么样的方式来解析服务器返回的数据*/

 //如果返回的是XML,那么告诉AFN,响应的时候使用XML的方式解析
// manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

 //如果返回的就是二进制数据,那么采用默认二进制的方式来解析数据(HTTP)
 manager.responseSerializer = [AFHTTPResponseSerializer serializer];

 //采用JSON的方式来解析数据
 //manager.responseSerializer = [AFJSONResponseSerializer serializer];
 
  //指定接收信号为image/png
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"image/png"];
 
 [manager GET:@"https://search-operate.cdn.bcebos.com/9dfdb7a4fa9dab231f5dd9b90dc91597.png" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
    NSLog(@"%@---%@",[responseObject class],responseObject);
    self.ImageView.image = [UIImage imageWithData:responseObject]; //NSData转UIimage

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"请求失败--%@",error);
}];

通过 URL 下载文件

@property (nonatomic, strong) NSURLSessionDownloadTask* downloadTask;

- (void)downloadFromURL:(NSString *)downloadURL
{
    /* 创建网络下载对象 */
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    /* 下载地址 */
    NSURL *url = [NSURL URLWithString:downloadURL];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    /* 下载路径 */
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Announcement"]; // 指定下载到沙盒下新建的Announcement文件夹中
    NSFileManager *fileManager = [NSFileManager defaultManager];
    // 创建文件夹
    BOOL isDir = NO;
    BOOL existed = [fileManager fileExistsAtPath:path isDirectory:&isDir]; // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
    if (!(isDir && existed)) {
        // 在Document目录下创建一个Announcement目录
        [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];
    }
    NSString *filePath = [path stringByAppendingPathComponent:url.lastPathComponent];

    /* 开始请求下载 */
    self.downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        NSLog(@"下载进度:%.0f%,线程:%@", downloadProgress.fractionCompleted * 100, [NSThread currentThread]);
        dispatch_async(dispatch_get_main_queue(), ^{
            //进行UI操作(刷新进度条),需要切换到主线
        });

    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        /* 设定下载到的位置 */
        return [NSURL fileURLWithPath:filePath];

    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        [[[UIAlertView alloc] initWithTitle:@"下载完成" message:self.downloadTask.response.suggestedFilename delegate:self cancelButtonTitle:@"知道了" otherButtonTitles: nil] show]; // 弹出下载完成弹窗提示
    }];
    [self.downloadTask resume];
}

POST 登录用户名密码

ViewController.m

- (void)post {
    //1.创建会话管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/json",@"text/plain", nil];
    
    //2.创建参数
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:@"phoneAreaCode" forKey:@"86"];
    [dict setObject:@"phoneNumber" forKey:@"13766666666"];
    [dict setObject:@"password" forKey:@"12345678"];
    //3.发送POST请求
    [manager POST:@"http://cn.test.api.gethover.com/api/auth/login/phone"
       parameters:dict headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"请求成功%@---%@",[responseObject class], responseObject);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"请求失败---%@",error);
    }];
}

解决POST secure connection 问题

报错信息:

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection...

解决方法:
Info.plist
Information Property List -> App Transport Security Settings ->Allow Arbitrary Loads:YES

实时监听网络

- (void)AFNReachability
{
    //1.创建网络监听管理者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //2.监听网络状态的改变
    /*
     AFNetworkReachabilityStatusUnknown          = 未知
     AFNetworkReachabilityStatusNotReachable     = 无网络
     AFNetworkReachabilityStatusReachableViaWWAN = 3G 4G
     AFNetworkReachabilityStatusReachableViaWiFi = WIFI
     */
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"无网络");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"3G,4G");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WIFI");
                break;
            default:
                break;
        }
    }];
    //3.开始监听
    [manager startMonitoring];
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!