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
- AFNetworking的封装使用
- AFNetWorking使用及二次封装的好处
- AFNetworking的封装 项目使用
- AFNetWorking封装使用
- AFNetWorking的二次封装
- AFNetWorking的二次封装
- AFNetworking 的封装 Swift
- AFNetworking的二次封装
- AFNetworking的简单封装
- 基于AFNetWorking的网络封装
- 对AFNetworking的简单封装
- 对AFNetworking的简单封装
- iOS AFNETWorkIng的封装类
- AFNetWorking 封装
- 封装AFNetWorking
- AFNetworking封装
- AFNetworking 2.0 网络请求封装使用
- AFNetworking的使用
- android--SurfaceView和View最本质的区别
- Python学习之始
- C++的函数重载
- ios学习笔记-06-实践
- Java ArrayDeque、PriorityQueue 先进先出队列(FIFO)
- AFNetworking的封装使用
- iOS9开发GOGOGO:新特性
- mysql 重新学习一 (增删查改)
- eclipse安装
- Leetcode: Delete Node in a Linked List
- 031.Nested Loop 嵌套循环
- android--面试题总结加强再加强版(一)
- 正则表达式基本用法简介
- 测试Oracle中插入数据是无序的