zoukankan      html  css  js  c++  java
  • AFNetworking3.0使用

    AFHTTPSessionManager:

    根据这个对象可以对请求千设置一些参数和状态

    //得到一个session manager
         AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSOperationQueue *operationQueue = [manager operationQueue];
        // 判断网络状态
        [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWWAN:
                case AFNetworkReachabilityStatusReachableViaWiFi:
                {
                    [operationQueue setSuspended:NO];
                }
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable:
                default:
                {
                     [operationQueue setSuspended:YES];
                }
                   
                    break;
            }
        }];

    发送请求以GET为例子:

        [manager GET:@"http://apis.baidu.com/apistore/iplookupservice/iplookup" parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSString *str = responseObject ;
            NSLog(@"suc >>>%@" ,[NSThread currentThread]);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];

    这里的Block块在主线程,因为底层已经处理了

    这是指定String 类型的URL 还可以不用系统帮我们封装,自己构造request

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:httpUrl parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"117.89.35.58",@"ip" ,nil] error:nil];
        [request addValue:@"5560971e1657a727c71e04ce5b145798" forHTTPHeaderField:@"apikey"];

    建议Request用AF建议的方法构造,AFHTTPRequestSerializer 用于构造序列化的Request,然后交给AFHTTPSessionManager处理得到一个NSURLSessionDataTask

     NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
           // NSLog(@"res ===%@" , responseObject);
            NSLog(@"suc >>>%@" ,[NSThread currentThread]);
            NSDictionary *dic = responseObject;
            NSLog(@"dic ==%@" ,dic);
        }];

    这里回调也是主线程

    NSURLSessionDataTask有两个方法用来控制任务状态

    - (void)suspend;

    - (void)resume;

    得到NSURLSessionDataTask之后默认状态是Suspend必须调用resume

    AFJSONResponseSerializer 默认初始化@"application/json", @"text/json", @"text/javascript"有这几种,如果内容格式为就会报错@"text/plain",解决办法就是添加进去就行了

  • 相关阅读:
    仪仗队
    疫情控制
    Code
    距离咨询
    舒适的路线
    桐桐的糖果计划
    跑路
    最短路计数
    骑马修栅栏
    搭桥
  • 原文地址:https://www.cnblogs.com/pigface/p/5072604.html
Copyright © 2011-2022 走看看