美文网首页
浅谈AFN的使用

浅谈AFN的使用

作者: 迷路的安然和无恙 | 来源:发表于2016-06-18 19:17 被阅读2462次

AFN作为网络处理第三方的老大地位,我就不赘述了,直接说使用,以下是所包含的四个类。

  • AFHTTPSessionManager管理者发送请求
  • AFNetworkReachabilityManager网络监测
  • ADSecurityPlicyhttps
  • AFURLResponseSeralization
    ==演示==
    AFN中的get和post请求
  • get请求
//创建请求
AFHTTPSessionManger *manger = [AFHTTPSession manger];
//修改block的线程
manager.completionQueue = dispatch_get_global_queue;
NSDictionary *parma = @{@"name":@"xiaoxinxin",@"age":@18};
//发送请求
manager GET:@"" parameters:nil progress:nil success:^{
//默认在主线程执行
NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
}fileure^{
NSLog(@"%@",[error localizedDescription]);
}

==使用注意==
* AFN发送的所有请求都是异步,不会阻塞主线程
* 默认情况下是JSON解析
* block代码块内容是在get和post请求完成之后才执行
* block默认在主线程执行,如果希望修改代码块在子线程执行如下修改

manager.completionQueue = dispatch_get_global_queue;
  • post请求

      - (void)postDemo {
      //创建管理者
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
       //更改执行的线程
      manager.completionQueue = dispatch_get_global_queue(0, 0);
      //更改默认请求的发送请求的二进制数据为JSON格式的二进制更改默  认的序列化方式
      manager.requestSerializer = [AFJSONRequestSerializer serializer];
      //更改响应默认的解析方式为字符串解析
      manager.responseSerializer = [AFHTTPResponseSerializer serializer];
      //参数
       NSDictionary *parma = @{@"name":@"xiaoxinxin,@"age":@18};
      //发送数据
      [manager POST:@"http://192.168.23.7/post/postjson.php"  parameters:parma progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
      //默认在主线程执行
      NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _ Nonnull error) {
      NSLog(@"%@",[error localizedDescription]);
      }];
    

}

**请求的序列化和反序列化**
* AFN可以把OC对象转成三种方式的二进制,请求的普通二进制(默认的)
* 解析二进制默认是JSON
==AFN的BaseURL==
* 区分测试模式和正式模式
** AFN文件上传与网络监测 **
* 网络监测

//检测网络状态

  • (void)reachAbility {
    //创建一个单例manager
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //监测网络状态改变
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
    case AFNetworkReachabilityStatusUnknown:
    NSLog(@"没有网络");
    break;
    case AFNetworkReachabilityStatusNotReachable:
    NSLog(@"连接到路由器网络不能到达");
    break;
    case AFNetworkReachabilityStatusReachableViaWWAN:
    NSLog(@"2G/3G/4G");
    break;
    case AFNetworkReachabilityStatusReachableViaWiFi:
    NSLog(@"wifi");
    break;
    }
    }];
    //开启检测
    [manager startMonitoring];
    }
**上传图片案例演示**[向服务器上传多张图片的工具类](https://github.com/giveMeHug)
  • (IBAction)selectPhotos:(id)sender {
    //创建图片多选控制器
    ZLPhotoPickerViewController *pickerVc = [[ZLPhotoPickerViewController alloc] init];
    //默认显示相册里面的内容SavePhotos
    pickerVc.status = PickerViewShowStatusSavePhotos;
    //选择图片的最小数,默认是9张图片最大也是9张
    pickerVc.maxCount = 4;
    [self presentViewController:pickerVc animated:YES completion:nil];
    // block回调或者代理
    //用block来代替代理
    __weak typeof(self) weakSelf = self;
    pickerVc.callBack = ^(NSArray *assets){
    for (ZLPhotoAssets *photoAsset in assets) {
    //将图片改成二进制
    NSData *data = UIImagePNGRepresentation(photoAsset.originImage);
    //给图片起名字
    NSString *filename = [NSString stringWithFormat:@"%d.png",arc4random_uniform(100)];
    //保存图片到字典中
    [weakSelf.fileDict setObject:data forKey:filename];
    }
    };
    }
  • (IBAction)uploadFile:(id)sender {
    //创建一个管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //需要传入的参数
    NSDictionary *parma = @{
    @"status":@"upload succees"
    };
    //修改默认的二进制的传输类型为JSON格式的二进制
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    //发送请求
    [manager POST:@"http://192.168.23.7/post/upload-m.php" parameters:parma constructingBodyWithBlock:^(id_Nonnull formData) {
    //遍历字典formdata包括请求体拼接
    [self.fileDict enumerateKeysAndObjectsUsingBlock:^(NSString *saveFiledname,NSData *imageData, BOOL * _Nonnull stop) {
    //拼接文件参数拼接在formdata后面
    //第一个参数:文件的二进制
    //第二个参数:后台接收的字段名userfile[]
    /第三个参数:保存起来的名字saveFileName
    [formData appendPartWithFileData:imageData name:@"userfile[]" fileName:saveFiledname mimeType:@"image/png"];
    }];
    } success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
    //打印服务器返回的参数
    NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //打印错误信息
    NSLog(@"%@",[error localizedDescription]);
    }];
    }
AFN上传数据的方法appendPartWithFileData:
  • (void)appendPartWithFileData:(NSData *)data
    name:(NSString *)name
    fileName:(NSString *)fileName
    mimeType:(NSString *)mimeType;
    //参数1:fileData:需要上传的文件的二进制,如果是多文件,fileData指的是每一个文件的二进制
    //参数2:name:服务器用来接收传入数据的字段名
    //参数3:保存到服务器上的名字
    //参数:标记上传的数据的格式如image/png

相关文章

  • 浅谈AFN的使用

    AFN作为网络处理第三方的老大地位,我就不赘述了,直接说使用,以下是所包含的四个类。 AFHTTPSessionM...

  • 04 AFN

    一: AFN框架基本使用 #######1.1 AFN内部结构 #######1.2 AFN的基本使用 1, 发送...

  • iOS开发-AFNetworking框架基本使用

    一、AFN框架基本使用 1.1 AFN内部结构 1.2 AFN的基本使用 (1)发送POST请求的方式 (2)使用...

  • iOS之网络篇(你知道这些零碎的知识吗?)

    1.AFN使用技巧 2.AFN文件上传 3.使用AFN进行序列化处理 4.使用AFN来检测网络状态 5.数据安全 ...

  • AFN框架基本使用

    一、AFN内部结构 AFN结构体 NSURLConnection: NSURLSession 二、AFN的基本使用...

  • AFN框架使用

    AFN框架使用 1.AFN框架基本使用 2 .AFN的基本使用 (1)发送GET请求的两种方式(POST同) (2...

  • AFN

    1.AFN框架基本使用 1 AFN内部结构 2 AFN的基本使用 (1)发送GET请求的两种方式(POST同) (...

  • AFNetWorking框架

    1.AFN框架基本使用 1.1 AFN内部结构 1.2 AFN的基本使用 (1)发送GET请求的两种方式(POST...

  • 多线程网络07

    1 AFN基本使用(GET和POST) 2 AFN实现文件下载 3 AFN实现文件上传 5 AFN序列化相关处理 ...

  • AFN4.0 基本使用解析

    之前一直使用AFN3.x的版本,然后上架应用被拒,因为AFN3.x的版本使用了UIWebView,新的AFN4.0...

网友评论

      本文标题:浅谈AFN的使用

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