AFNetworking的封装使用

来源:互联网 发布:linux系统cd命令 编辑:程序博客网 时间:2024/06/14 19:11

post请求使用方法



get请求使用方法



注意事项



=================================


下面是

Request.h 封装了请求,可以直接拿来用的

////  Request.h//  咚咚API////  Created by 陆巧怡 on 15/6/30.//  Copyright (c) 2015年 Simon. All rights reserved.//@protocol RequestDelegate <NSObject>/** *  网络请求成功返回的数据 * *  @param responseObject 请求成功返回的数据 *  @param requestName 请求的名字 */-(void)requestFinish:(id)responseObject requestName:(NSString *)requestName;/** *  网络请求失败返回的数据 * *  @param error       请求失败返回的数据 *  @param requestName 请求的名字 */-(void)requestError:(NSError *)error requestName:(NSString *)requestName;@end#import "AFHTTPSessionManager.h"#import <AFHTTPSessionManager.h>@interface Request : AFHTTPSessionManager@property (nonatomic, strong) NSMutableDictionary *configRequsetData;@property (nonatomic, weak) id<RequestDelegate> delegate;/** *  Get 取得数据 * *  @param parameters  参数 *  @param requestName 请求方法的名字 */- (void)getData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName;/** *  Post 提交数据 * *  @param parameters 参数 *  @param requestName 请求方法的名字 */- (void)postData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName;/** *  Post 提交数据,包含了图片数据 * *  @param parameters 参数 *  @param requestName 请求方法的名字 */-(void)postImageData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName;@end

////  Request.m//  咚咚API////  Created by 陆巧怡 on 15/6/30.//  Copyright (c) 2015年 Simon. All rights reserved.//#import "Request.h"@implementation Request- (id)init{    self = [super initWithBaseURL:[NSURL URLWithString:API_URL]];    if (self) {        // 得到的是二进制        self.responseSerializer = [AFHTTPResponseSerializer serializer];        //设置 设置为60s超时:请求时间超过60s会被认为连接不上,连接超时          self.requestSerializer.timeoutInterval = 60;        //[self settingConfigRequestData];            }    return self;}#pragma mark ========== Get请求 取得数据 ============/** *  Get 取得数据 * *  @param parameters  参数 *  @param requestName 请求方法的名字 */- (void)getData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName {    //添加参数    NSString *apiName = parameters[@"api"];    [parameters removeObjectForKey:@"api"];    [self GET:apiName parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {        // HTML 需要转码        NSMutableDictionary *responseData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];                [self.delegate requestFinish:responseData requestName:requestName];    } failure:^(NSURLSessionDataTask *task, NSError *error) {        [self.delegate requestError:error requestName:requestName];    }];}#pragma mark ========== post请求 取得数据 ============/** *  Post 取得数据 * *  @param parameters  参数 *  @param requestName 请求方法的名字 */-(void)postData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName{        //添加参数    NSString *apiName = parameters[@"api"];    [parameters removeObjectForKey:@"api"];        [self POST:apiName parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {                // HTML 需要转码        NSMutableDictionary *responseData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];        [self.delegate requestFinish:responseData requestName:requestName];            } failure:^(NSURLSessionDataTask *task, NSError *error) {                [self.delegate requestError:error requestName:requestName];    }];}#pragma mark ========== post请求包含图片信息 取得数据 ============-(void)postImageData:(NSMutableDictionary *)parameters requestName:(NSString *)requestName{    //添加参数    NSString *apiName = parameters[@"api"];    [parameters removeObjectForKey:@"api"];        //获取parameters 存储的图片数据    NSMutableDictionary *imageDic = parameters[@"uploadImageData"];    [parameters removeObjectForKey:@"uploadImageList"];    [self POST:apiName parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {                //遍历字典,取出图片的数据 然后添加到 formData        for (NSString *key in imageDic) {            NSData *imageData = UIImageJPEGRepresentation(imageDic[key], 1);            [formData appendPartWithFileData:imageData name:key fileName:[NSString stringWithFormat:@"%@.jpg",key] mimeType:@"image/jpeg"];        }    } success:^(NSURLSessionDataTask *task, id responseObject) {        // HTML 需要转码        NSMutableDictionary *responseData = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];        [self.delegate requestFinish:responseData requestName:requestName];            } failure:^(NSURLSessionDataTask *task, NSError *error) {                [self.delegate requestError:error requestName:requestName];            }];}/** *  设置默认传送的参数,需要时候在调用。结合需求,就是传固定参数。例如传版本号之类的。 */-(void)settingConfigRequestData{        if (!self.configRequsetData) {        self.configRequsetData = [NSMutableDictionary dictionary];        self.configRequsetData[@"version"] = APP_VERSION;    }}@end

=================================


Api.h 封装了请求接口,可以直接拿来用的

////  Api.h//  咚咚API////  Created by 陆巧怡 on 15/7/6.//  Copyright © 2015年 Simon. All rights reserved.//#import <Foundation/Foundation.h>#import "Request.h"@interface Api : NSObject<RequestDelegate>@property (nonatomic, strong) Request *request;/** *  请求成功的数据 以及接口名字 */@property (nonatomic, copy) void(^didRequestFinishBlock)(id request,NSString *requestName);/** *  请求失败的数据 以及接口名字 */@property (nonatomic, copy) void(^didRequestErrorBlock)(NSError *error,NSString *requestName);/** *  请求成功或者失败数据返回Block * *  @param finishData 请求成功的数据 以及接口名字 *  @param errorData  请求失败的数据 以及接口名字 */-(void)requestFinishData:(void(^)(id responseObject,NSString *requestName))finishData requestError:(void(^)(NSError * error,NSString *requestName))errorData;//post 请求拿数据-(void)GetHotgoods:(NSMutableDictionary *)dic;//get 请求拿数据-(void)GetProduct:(NSMutableDictionary *)dic;@end

////  Api.m//  咚咚API////  Created by 陆巧怡 on 15/7/6.//  Copyright © 2015年 Simon. All rights reserved.///**    Api 是获得数据的接口。调用时候直接写方法就可以。 */#import "Api.h"#import "Request.h"@implementation Api- (instancetype)init{    self = [super init];    if (self) {        [self createData];    }    return self;}#pragma mark 初始化数据-(void)createData{        self.request = [[Request alloc]init];    self.request.delegate = self;}#pragma mark dealloc 里面释放。-(void)dealloc{        self.didRequestErrorBlock = nil;    self.didRequestFinishBlock = nil;}#pragma mark Request的代理,数据请求-(void)requestFinish:(id)responseObject requestName:(NSString *)requestName{        //block 赋值    self.didRequestFinishBlock(responseObject,requestName);}-(void)requestError:(NSError *)error requestName:(NSString *)requestName{        //block 赋值    self.didRequestErrorBlock(error,requestName);}/** *  请求成功或者失败数据返回Block * *  @param finishData 请求成功的数据 以及接口名字 *  @param errorData  请求失败的数据 以及接口名字 */-(void)requestFinishData:(void(^)(id responseObject,NSString *requestName))finishData requestError:(void(^)(NSError * error,NSString *requestName))errorData{        self.didRequestFinishBlock = finishData;    self.didRequestErrorBlock = errorData;}#pragma mark//post-(void)GetHotgoods:(NSMutableDictionary *)dic{        dic[@"api"] = @"system/get-brands";    [self.request postData:dic requestName:@"post请求"];}//get-(void)GetProduct:(NSMutableDictionary *)dic{    dic[@"api"] = @"system/getcategory";    [self.request getData:dic requestName:@"get"];}@end

=================================

这里是pch文件一些宏定义。以上两个会用到的

////  PrefixHeader.pch//  咚咚API////  Created by 陆巧怡 on 15/6/25.//  Copyright (c) 2015年 Simon. All rights reserved.//#ifndef __API_PrefixHeader_pch#define __API_PrefixHeader_pch#import "myTabBarController.h"// Include any system framework and library headers here that should be included in all compilation units.// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.//配置#define APP_VERSION  [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"]#define API_URL  @"http://www.haimi.com//api"#define CreateController(mainViewController,vc,nvc)\mainViewController * vc = [[mainViewController alloc]init];\UINavigationController * nvc =[[UINavigationController alloc]initWithRootViewController:vc];#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height#define SCREEN_WDITH [UIScreen mainScreen].bounds.size.width#define IOS7_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending )#define IOS8_OR_LATER ( [[[UIDevice currentDevice] systemVersion] compare:@"8.0"] != NSOrderedAscending )#define DEVICE_IS_IPHONE5_OR_LATER ([[UIScreen mainScreen] bounds].size.height == 568)#define STATUS_BAR_HEIGHT 20.0#define NAV_BAR_HEIGHT 44.0#define NAVIGATION_BAR_HEIGHT 64.0#define STATUS_NAV_BAR_HEIGHT 64.0#define TOOL_BAR_HEIGHT 49.0#define DESIGN_HEIGHT SCREEN_HEIGHT - NAV_BAR_HEIGHT - STATUS_BAR_HEIGHT - TOOL_BAR_HEIGHT//判断字符串是否为空#define IFISNIL(v)                                 (v = (v != nil) ? v : @"")//判断NSNumber是否为空#define IFISNILFORNUMBER(v)                        (v = (v != nil) ? v : [NSNumber numberWithInt:0])//判断是否是字符串#define IFISSTR(v)                                 (v = ([v isKindOfClass:[NSString class]]) ? v : [NSString stringWithFormat:@"%@",v])// 判断设备#define IS_IPHONE_4 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)480) < DBL_EPSILON)#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)// Sqlite 数据库名#define DATABASE_NAME @"lr211.sqlite"#define LIKE_DATA_PLIST @"LikeData.list"#define FILL_ZERO(N) N < 10 ? [NSString stringWithFormat:@"0%ld", N] : [NSString stringWithFormat:@"%d", N]//// 重新定义 NSLocalizedString#define LS(str) NSLocalizedString(str, nil)#define STRING(string) string ? string : @"String Is Nil"#pragma mark -#pragma mark -# Masonry#define MAS_SHORTHAND#define MAS_SHORTHAND_GLOBALS#pragma mark -#pragma mark -# DEBUG#ifdef DEBUG#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);#else#   define DLog(...)#endif#endif

=================================

终于到了实现了  

////  ViewController1.m//  咚咚API////  Created by 陆巧怡 on 15/6/25.//  Copyright (c) 2015年 Simon. All rights reserved.//#import "ViewController1.h"#import "FMDBManager.h"#import "Models.h"#import "Api.h"@interface ViewController1 ()@end@implementation ViewController1- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor whiteColor];        self.api = [[Api alloc]init];    self.dataDic = [NSMutableDictionary dictionary];           UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];    [button setTitle:@"post请求" forState:UIControlStateNormal];    button.frame = CGRectMake(50, 100, 200, 30);    [button addTarget:self action:@selector(postbuttonAction:) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:button];            UIButton *getButton = [UIButton buttonWithType:UIButtonTypeSystem];    [getButton setTitle:@"get请求" forState:UIControlStateNormal];    getButton.frame = CGRectMake(50, 150, 200, 30);    [getButton addTarget:self action:@selector(getbuttonAction:) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:getButton];            UIButton *dataButton = [UIButton buttonWithType:UIButtonTypeSystem];    [dataButton setTitle:@"请求后获取数据" forState:UIControlStateNormal];    dataButton.frame = CGRectMake(50, 200, 200, 30);    [dataButton addTarget:self action:@selector(dataButtonAction:) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:dataButton];        }//post-(void)postbuttonAction:(UIButton *)btn{    DLog(@"post 请求");        NSMutableDictionary *dic =[NSMutableDictionary dictionary];    [dic setObject:@"ANDROID" forKey:@"platform"];    [dic setObject:@"4.2.2" forKey:@"osVersion"];    [dic setObject:@"2.1.1" forKey:@"currentVersion"];    [dic setObject:@"User863990020791016" forKey:@"pushID"];    [dic setObject:@"HM NOTE 1TD" forKey:@"deviceName"];    [dic setObject:@"zh" forKey:@"language"];    [dic setObject:@"haimi" forKey:@"appName"];    [dic setObject:@"863990020791016" forKey:@"deviceID"];    [dic setObject:@"xm" forKey:@"channel"];        [self.api GetHotgoods:dic];    //block回调取得数据    [self.api requestFinishData:^(id responseObject, NSString *requestName) {                self.dataDic = (NSMutableDictionary *)responseObject;//        DLog(@"请求成功的数据%@ --- %@",requestName,responseObject);            } requestError:^(NSError *error, NSString *requestName) {                DLog(@"请求失败的数据%@ --- %@",requestName,error);            }];    }//get-(void)getbuttonAction:(UIButton *)btn{    NSMutableDictionary *dic =[NSMutableDictionary dictionary];    [dic setObject:@"ANDROID" forKey:@"platform"];    [dic setObject:@"4.3" forKey:@"osVersion"];    [dic setObject:@"2.1.1" forKey:@"currentVersion"];    [dic setObject:@"User00000000" forKey:@"pushID"];    [dic setObject:@"HM+1SW" forKey:@"deviceName"];    [dic setObject:@"zh" forKey:@"language"];    [dic setObject:@"haimi" forKey:@"appName"];    [dic setObject:@"00000000" forKey:@"deviceID"];    [dic setObject:@"tbzs" forKey:@"channel"];        [self.api GetProduct:dic];    //block回调取得数据    [self.api requestFinishData:^(id responseObject, NSString *requestName) {                DLog(@"请求成功的数据%@ --- %@",requestName,responseObject);            } requestError:^(NSError *error, NSString *requestName) {                DLog(@"请求失败的数据%@ --- %@",requestName,error);            }];    }-(void)dataButtonAction:(UIButton *)btn{        DLog(@"%@",self.dataDic);        }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end




0 0
原创粉丝点击