AFNetWorking网络请求的使用

2018-03-21  本文已影响0人  super_2e20
      //请求jSON数据
    //<1>创建请求操作管理者对象
    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
    //<2>设置请求的数据类型(json、xml)
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
    //<3>开始请求数据并解析
    [manager GET:kJSONUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //此时responseObject就是解析以后的数据 如果json数据根是字典那么responseObject就是字典 如果是数组那么responseObject就是数组
        NSLog(@"%@",responseObject);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@",error.description);
    }];
    
     //xml数据请求
    //<1>创建请求操作管理者对象
    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
    //<2>设置请求数据的类型(json、xml)
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/xml"];
    //<3>AFNetworking 提供的xml数据解析非常复杂 一般的时候都是用第三方库GData  所以关闭AFN提供的xml解析
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //<4>开始请求数据
    [manager GET:kXMLUrlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //<1>将所有数据解析出来放在内存中
        GDataXMLDocument * document = [[GDataXMLDocument alloc]initWithData:responseObject options:0 error:nil];
        //<2>根据路径查找想要的节点信息
        NSArray * array = [document nodesForXPath:@"//title" error:nil];
        //<3>遍历数组中的节点内容
        for(GDataXMLElement * element in array)
        {
            //获取节点的内容调用的方法是stringValue
            NSLog(@"%@",element.stringValue);
        }
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@",error.description);
    }];

2.多任务请求数据

  NSArray * imageArr = @[@"http://icon.58pic.com/revision/images/img-code-bg.png",
                       @"http://icon.qiantucdn.com/img/searchnew/wechat-g.png",
                       @"http://icon.qiantucdn.com/revision/images/user-img-default.png"];
//【注意】一个请求对象只能请求一个接口的数据

//定义一个可变数组存放三个请求对象 然后将请求对象放在队列中
NSMutableArray * requestArr = [[NSMutableArray alloc]init];

for(int i = 0;i<3;i++)
{
    //<1>将字符串接口转化成NSURL
    NSURL * url = [NSURL URLWithString:imageArr[i]];
    //<2>将NSURL封装成请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //<3>将请求对象封装成请求操作对象
    AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
    //<4>对象请求数据结束以后将内容显示在UIImageView上
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
     {
        //将responseObject NSData类型的数据转化成UIImage
         UIImage * image = [UIImage imageWithData:responseObject];
         UIImageView * imageView = (UIImageView *)[self.view viewWithTag:i + 1];
         imageView.image = image;
         
         NSLog(@"request%d",i + 1);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@",error.description);
    }];
    
    //<5>将请求对象放在数组中
    [requestArr addObject:operation];
}

//<6>创建队列对象
NSOperationQueue * queue = [[NSOperationQueue alloc]init];
//<7>设置最大请求数据的对象个数
queue.maxConcurrentOperationCount = 3;
//<8>将所有请求对象放在队列中
[queue addOperations:requestArr waitUntilFinished:NO];
判断网络状态
  AFHTTPRequestOperationManager *manager =  [AFHTTPRequestOperationManager manager];

  //<2>判断网络状态
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    if(status == AFNetworkReachabilityStatusReachableViaWiFi)
    {
        NSLog(@"WIFI");
    }
    else if (status == AFNetworkReachabilityStatusReachableViaWWAN)
    {
        NSLog(@"3G/4G/GPRS");
    }
    else if (status == AFNetworkReachabilityStatusNotReachable)
    {
        NSLog(@"无网络连接");
    }
    else
    {
        NSLog(@"网络未知");
    }
}];
//<3>开启网络测试
[manager.reachabilityManager startMonitoring];
上一篇 下一篇

猜你喜欢

热点阅读