美文网首页
AFNetWorking网络请求的使用

AFNetWorking网络请求的使用

作者: super_2e20 | 来源:发表于2018-03-21 19:21 被阅读0次
          //请求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];

    相关文章

      网友评论

          本文标题:AFNetWorking网络请求的使用

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