AFNetworking的封装使用

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值