zoukankan      html  css  js  c++  java
  • 基于AFNetWorking 3.0封装网络请求数据的类

      对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置。 

      最好的方式就是对网络层再封装一层,全工程不允许直接使用 AFNetworking 的 API ,必须调用我们自己封装的一层,如此一来,任何网络配置都可以在这一层里配置好,使用的人无须知道里面在干嘛,只管调用就可以了。

      本篇为基于AFNetworking3.0的版本,支持iOS7及其以上版本。

      

      基于NSObject的类创建一个继承于NSObject类的命名为(个人命名)NetManager的类。

      在.h文件中

      

      #import "AFNetworking.h"

      typedef  void(^DownLoadFinishedBlock)(id responseObj);

      typedef void (^DownLoadFialedBlock)(NSError*error);

     

      @interface NetManager : NSObject

       GET请求数据的方法

      +(void)doGetWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed;

      POST请求数据的方法

      +(void)doPostWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed;

     

    @end

    DownLoadFinishedBlock 是响应成功的回调,返回的是id类型,外部再转换成类型模型就可以了。 

    DownLoadFialedBlock 是响应失败的回调,只有一个 NSError 对象,外部可接收处理。

    在.m文件中

    GET请求的处理:

    +(void)doGetWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed{

        AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:type, nil];

        

        [manager GET:urlString parameters:dic progress:^(NSProgress * _Nonnull downloadProgress) {

            

            // 这里可以获取到目前的数据请求的进度

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            

            // 请求成功,解析数据

            finished(responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            

            // 请求失败

            fialed(error);

        }];

    }

     

    POST请求的处理:

    +(void)doPostWithUrlStr:(NSString*)urlString parameters:(NSDictionary*)dic contentType:(NSString*)type finished:(DownLoadFinishedBlock)finished failure:(DownLoadFialedBlock)fialed

    {

        AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

        manager.responseSerializer = [AFHTTPResponseSerializer serializer];

        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:type, nil];

        

        [manager POST:urlString parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

            

            // 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。

            

        } progress:^(NSProgress * _Nonnull uploadProgress) {

            

            // 这里可以获取到目前的数据请求的进度

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            // 请求成功,解析数据

            finished(responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            // 请求失败

            fialed(error);

        }];

    }

      下面是在一个例子,就是在自己的项目中,调用自己封装好的类;

      假如点击按钮时下载数据

      在该控制器类中,调用之前封装的方法即可。

      

      #import "NetManager.h"

      

      在按钮点击事件里执行下方方法即可:

    -(void)btnClicked:(UIButton *)btn{

        

            NSMutableDictionary *dict = [NSMutableDictionary dictionary];

            [dict setValue:@"1" forKey:@"type"];

            [dict setValue:@"1" forKey:@"placed"];

        [NetManager doGetWithUrlStr:@"http://app.youmyou.com/index.aspx?" parameters:dict contentType:@"text/html" finished:^(id responseObj) {

            //对responseObj做对应的操作即可

        //eg:

                  id json = [NSJSONSerialization JSONObjectWithData:responseObj options:NSJSONReadingMutableContainers error:nil];

            NSLog(@"json = %@",json);

            

        } failure:^(NSError *error) {

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

        }];  

     

  • 相关阅读:
    CCLayerColor 用法
    数据存储的常见方式
    rand() 和arc4random()到底应该如何取舍呢
    Cocos2d 中对图片的各种操作
    objectivec 解压缩zip
    设置IE浏览器默认的下载路径
    设置浏览器主页
    得到所有本机上安装的软件名
    取消快捷方式中的箭头图标
    查看本机服务
  • 原文地址:https://www.cnblogs.com/MasterPeng/p/5333608.html
Copyright © 2011-2022 走看看