打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
网络(4)—AFNetWorking进行数据请求

(1)AFNetWorking是现在最流行的数据请求方法 不仅包含数据请求 还包含数据解析(也就是同时封装了系统请求类NSURLConnection NSJSonSerializationNSXMLParser

(2)能够兼容ios6.0 也兼容block语法 同时兼容arc

***********************************************************************************************************
一.在RootViewController.m中
(1)导入三方库:AFNetworking  和 GData
          添加系统库:libxml2.dylib
         在Build Settings ——>Search Paths ——>Header Search Paths 添加 /usr/include/libxml2
          导入头文件:

       #import "AFHTTPRequestOperationManager.h"


       #import "GDataXMLNode.h"

          定义宏:

//json

#define kJSONUrlString @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1"

//xml的地址

#define kXMLUrlString @"http://wiapi.hexun.com/news/getlist4.0.php?pid=100234721&pc=20&pn=1&st=0"

(2)viewDidLoad里面调用封装的方法 [self createUI];

createUI方法实现:

 -(void)createUI

{

    NSArray * array = @[@"JSon",@"XML"];

    for(int i = 0;i<2;i++)

    {

        UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];

        btn.frame = CGRectMake(100, 150 + 100 * i, 100, 40);

        [btn setTitle:array[i] forState:UIControlStateNormal];

        [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

        [btn addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];

        btn.tag = i + 1;

        [self.view addSubview:btn];

    }

    self.navigationItem.title = @"AF进行数据异步请求";

}

(3)按钮响应方法

-(void)pressBtn:(id)sender

{

    UIButton * btn = (UIButton *)sender;

    if(btn.tag == 1)

    {

        //<1>初始化请求队列管理者对象

        AFHTTPRequestOperationManager*manager = [AFHTTPRequestOperationManager manager];

        //<2>

        //-----------扩展---------

        //判断当前网络状态

        /*

         AFNetworkReachabilityStatusNotReachable     = 0,

         AFNetworkReachabilityStatusReachableViaWWAN = 1,

         AFNetworkReachabilityStatusReachableViaWiFi = 2,

        */

        [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

            if(status == AFNetworkReachabilityStatusReachableViaWiFi)

            {

                NSLog(@"WIFI");

            }

            else if (status == AFNetworkReachabilityStatusReachableViaWWAN)

            {

                NSLog(@"3G/GPRS");

            }

            else

            {

                NSLog(@"无网络连接");

            }

        }];

        //开启网络监控

        [manager.reachabilityManager startMonitoring];

        //只要当前网络发生改变 就会立即调用block语句块

        //<3>设置请求数据的样式 只在请求json数据的时候设置

        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];

        //<4>开始请求数据并解析数据

        [manager GET:kJSONUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

            //responseObject就是请求下来的数据

            if([responseObject isKindOfClass:[NSDictionary class]])

            {

                //json数据

                NSLog(@"%@",responseObject);

            }

            else if ([responseObject isKindOfClass:[NSData class]])

            {

                //xml数据

                NSLog(@"%@",responseObject);

            }

            else if ([responseObject isKindOfClass:[NSArray class]])

            {

                //json数据

                NSLog(@"%@",responseObject);

            }

                

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            NSLog(@"error:%@",error.description);

        }];

    }

    else

    {

        //请求XML数据 AFNetWorking自带的xml数据解析类是NSXMLParser 该方法解析XML数据比较复杂 我们可以使用GData进行数据解析

        //<1>设置请求队列的管理者对象

        AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

        //<2>需要关闭AFNetWorking提供的XML数据解析方式

        manager.responseSerializer = [AFHTTPResponseSerializer serializer];

        //<3>开始异步请求 并且开始XML数据解析

        [manager GET:kXMLUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

            if([responseObject isKindOfClass:[NSData class]])

            {

                //使用GData进行xml数据解析

                //<1>将所有数据都解析出来放在内存中

                GDataXMLDocument * document = [[GDataXMLDocument alloc]initWithData:responseObject encoding:NSUTF8StringEncoding error:nil];

                //<2>通过XPath查找解析的数据的路径

                NSArray * elements = [document nodesForXPath:@"/doc/news/title" error:nil];

                //<3>获取title数据

                for(GDataXMLElement * element in elements)

                {

                    NSLog(@"title:%@",element.stringValue);

                    //获取节点的内容

                }

            }

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            NSLog(@"error:%@",error.description);

        }];

        

    }

}


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
AFNetworking 使用方法(2.0)
8.1 iOS中AFNetworking的简单使用
AFNnetworking详解
iOS应用开发中AFNetworking库的常用HTTP操作方法小结
AFNetworking的简单使用
偷师饿了么:怎样用HTTP/2优化iOS APP网络层次架构?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服