美文网首页程序员
AFN的基本使用(序列化)

AFN的基本使用(序列化)

作者: CoderJyq | 来源:发表于2016-06-06 16:03 被阅读507次

    问题描述 : 使用AFN发送网络请求时, 服务器返回的响应体responseObject默认是JSON数据,并且AFN已经帮我们做好了反序列处理, 返回的responseObject实际是一个经过反序列处理的OC对象.
    如果服务器返回的是JSON数据,那么AFN会帮我们做反序列处理;但如果返回的数据是XML呢 ? 或者既不是JSON ,也不是XML ,而且其他数据类型又该如何处理 ? 本文将探讨后面两种情况.

    1,服务器返回XML数据

    这里我使用AFN发送一个简单的GET请求来说明;
    1.创建会话管理者对象

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSDictionary *dict = @{@"type":@"XML"};
    

    2.实际上AFN给我们封装了一个设置序列化方法的属性

    //设置AFN的序列化方法--XML
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
    

    3.发送GET请求

    [manager GET:@"http://xxx" parameters:dict progress:nil success:
    ^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
            
            //得到XML解析器
            NSXMLParser *parser = responseObject;
            
            //设置代理
            parser.delegate = self;
            
            //开始解析
            [parser parse];
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"失败---%@",error);
        }];
    

    4.代理方法

    #pragma mark NSXMLParserDelegate
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { 
    
        NSLog(@"elementName:%@--%@",elementName,attributeDict);
    
    }
    

    P.S : 更多关于XML数据解析,请点击--XML数据解析

    2,服务器返回其他类型数据(非JSON非XML)

    1.创建会话管理者对象

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    

    2.如果服务器返回的数据既不是JSON也不是XML

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    

    3.发送GET请求

    [manager GET:@"http://xxx.png" parameters:nil 
    progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
            
            UIImage *image = [UIImage imageWithData:responseObject];
            self.imageView.image = image;
            //注意, GET请求默认是在主线程中执行的
            NSLog(@"%@---",[NSThread currentThread]);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"失败---%@",error);
        }];
    

    相关文章

      网友评论

        本文标题:AFN的基本使用(序列化)

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