• 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",解决办法就是添加进去就行了

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/pigface/p/5072604.html
Copyright © 2020-2023  润新知