您的位置:首页 > 其它

AFN使用:封装工具类

2015-10-19 13:26 155 查看
创建新工具类:

.h文件

#import <Foundation/Foundation.h>

@class AFNUploadParam;

@interface AFNHttpTool : NSObject

/**

 *  发送get请求

 *

 *  @param URLString  请求的基本的url

 *  @param parameters 请求的参数字典

 *  @param success    请求成功的回调

 *  @param failure    请求失败的回调

 */

+ (void)GET:(NSString *)URLString

                     parameters:(id)parameters

                        success:(void (^)(id responseObject))success

    failure:(void (^)(NSError *error))failure;

/**

 *  发送post请求

 *

 *  @param URLString  请求的基本的url

 *  @param parameters 请求的参数字典

 *  @param success    请求成功的回调

 *  @param failure    请求失败的回调

 */

+ (void)Post:(NSString *)URLString

 parameters:(id)parameters

    success:(void (^)(id responseObject))success

    failure:(void (^)(NSError *error))failure;

/**

 *  上传请求

 *

 *  @param URLString  请求的基本的url

 *  @param parameters 请求的参数字典

 *  @param success    请求成功的回调

 *  @param failure    请求失败的回调

 */

+ (void)Upload:(NSString *)URLString

  parameters:(id)parameters

 uploadParam:(AFNUploadParam *)uploadParam

     success:(void (^)(id responseObject))success

     failure:(void (^)(NSError *error))failure;
@end

创建的AFNUploadParam;类:

.h文件

#import <Foundation/Foundation.h>

@interface AFNUploadParam : NSObject

/**

 *  上传文件的二进制数据

 */

@property (nonatomic, strong) NSData *data;

/**

 *  上传的参数名称

 */

@property (nonatomic, copy) NSString *name;

/**

 *  上传到服务器的文件名称

 */

@property (nonatomic, copy) NSString *fileName;

/**

 *  上传文件的类型

 */

@property (nonatomic, copy) NSString *mimeType;

@end

.m文件

#import "AFNUploadParam.h"

@implementation CZUploadParam

@end

再回到AFNHttpTool的.m文件

#import "AFNHttpTool.h"

#import "AFNetworking.h"

#import "AFNUploadParam.h"

@implementation CZHttpTool

+ (void)GET:(NSString *)URLString  parameters:(id)parameters  success:(void (^)(id))success  failure:(void (^)(NSError *))failure

{

    // 创建请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager  manager];

   

    [mgr  GET:URLString  parameters:parameters  success:^(AFHTTPRequestOperation *operation, id responseObject) {

        // AFN请求成功时候调用block

        // 先把请求成功要做的事情,保存到这个代码块

        if (success) {

            success(responseObject);

        }

        

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        if (failure) {

            failure(error);

        }

    }];

}

+ (void)Post:(NSString *)URLString  parameters:(id)parameters  success:(void (^)(id))success  failure:(void (^)(NSError *))failure

{

    // 创建请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    [mgr  POST:URLString  parameters:parameters  success:^(AFHTTPRequestOperation *operation, id responseObject) {

       

        if (success) {

            success(responseObject);

        }

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        

        if (failure) {

            failure(error);

        }

    }];

}

+ (void)Upload:(NSString *)URLString  parameters:(id)parameters  uploadParam:(AFNUploadParam *)uploadParam  success:(void (^)(id))success failure:(void (^)(NSError *))failure

{

    // 创建请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    

    [mgr  POST:URLString  parameters:parameters  constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 上传的文件全部拼接到formData

        

        /**

         *  FileData:要上传的文件的二进制数据

         *  name:上传参数名称

         *  fileName:上传到服务器的文件名称

         *  mimeType:文件类型

         */

        [formData  appendPartWithFileData:uploadParam.data  name:uploadParam.name  fileName:uploadParam.fileName  mimeType:uploadParam.mimeType];

    

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {

        if (success) {

            success(responseObject);

        }

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        if (failure) {

            failure(error);

        }

    }];

}

@end

这时对于网络请求的工具类的封装。

当对应的业务类使用时:

截选   

+ (void)composeWithStatus:(NSString *)status  image:(UIImage *)image  success:(void (^)())success  failure:(void (^)(NSError *))failure

{

    // 创建参数模型

    AFNComposeParam *param = [AFNComposeParam  param];

    param.status = status;

    

    // 创建上传的模型

    AFNUploadParam *uploadP = [[AFNUploadParam alloc] init];

    uploadP.data = UIImagePNGRepresentation(image);

    uploadP.name = @"pic";

    uploadP.fileName = @"image.png";

    uploadP.mimeType = @"image/png";

    

    // 注意:以后如果一个方法,要传很多参数,就把参数包装成一个模型

    [AFNHttpTool  Upload:@"https://upload.api.weibo.com/2/statuses/upload.json"  parameters:param.keyValues  uploadParam:uploadP  success:^(id responseObject) {

        if (success) {

            success();

        }

    } failure:^(NSError *error) {

        if (failure) {

            failure(error);

        }

    }];

    

    

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工作笔记