iOS-->AFN的序列化处理

作者: 奕十八 | 来源:发表于2016-07-23 21:19 被阅读219次

    AFN的序列化处理

    当我们向服务器发送一个请求,服务器在返回数据的时候会在内部自动进行反序列化(JSON-->OC)处理,也就是说该框架内部会默认将返回的数据当作JSON处理,而当我们请求的数据不是JSON数据时,比如xml数据、图片、网页时就没法解析或者发送回错误的数据,那么这时我们应该怎么办呢?以下代码就上述问题一一举例做了解答,具体代码如下:

    #import "ViewController.h"
    #import "AFNetworking.h"
    @interface ViewController ()<NSXMLParserDelegate>
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self httpData2];
    }
    
    
    //要求:传参数以JSON的方式来传参数
     //manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    -(void)json{
        //01 创建管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
        NSDictionary *dict = @{@"username":@"wujian",@"pwd":@"wujian",@"type":@"JSON"};
    
        //02 发送GET请求
        [manager GET:@"http://120.2512/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"success--%@",responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"error -- %@",error);
        }];
    }
    
    -(void)xml{
        //01 创建管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
        NSDictionary *dict = @{@"type":@"XML"};
    
        //如果返回的数据是XML,那么应该修改对响应的处理方式为XML
    //    manager.responseSerializer = [AFXMLParserResponseSerializer  serializer];
    
        //02 发送GET请求
        [manager GET:@"http://120.812/video" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"success--%@",responseObject);
    
            //该请求服务器返回的是XML数据
            //而AFN默认以JSON的方式来处理XML数据
    
            //01 创建XML解析器
            NSXMLParser *parser = (NSXMLParser *)responseObject;
    
            //02 设置代理
            parser.delegate = self;
    
            //03 开始解析
            [parser parse];
    
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"error -- %@",error);
        }];
    }
    
    -(void)httpData
    {
        //01 创建管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
        //如果服务器返回的数据既不是JSON也不是XML,那么久设置HTTP的解析方式
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
        //02 发送GET请求
        [manager GET:@"http://www.baidu.com/uploadImages/2014/062/5FM7VSW8745Y_1000x500.jpg" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
            NSLog(@"success--%@",[responseObject class]);
            UIImage *Image = [UIImage imageWithData:responseObject];
    
            self.imageView.image = Image;
    
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"error -- %@",error);
        }];
    
    }
    
    -(void)httpData2
    {
        //01 创建管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
        //如果服务器返回的数据既不是JSON也不是XML,那么久设置HTTP的解析方式
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
        //02 发送GET请求
        [manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
            NSLog(@"success--%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
    
    
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"error -- %@",error);
        }];
    
    }
    
    
    #pragma mark NSXMLParserDelegate
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
    {
        NSLog(@"%@---%@",elementName,attributeDict);
    }
    @end
    

    相关文章

      网友评论

        本文标题:iOS-->AFN的序列化处理

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