iOS 网络请求封装类
此类名为CWSingleSample,只为方便自己修改, 添加方法所记录!
CWSingleSample.h
//
// CWSingleSample.h
// students
//
// Created by ZKSoft on 14/11/13.
// Copyright (c) 2014年 ZK. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AFHTTPClient.h"
#import "MBProgressHUD.h"
#import "AFHTTPRequestOperation.h"
#import "ASIHTTPRequest.h"
//请求成功时的回调block
typedef void (^getDataBlock)(id data);
//请求失败时的回调block
typedef void (^getErrorBlock)(NSError* error);
//上传文件时的回调block
typedef void (^getFileBlock)(NSString* fileName,id data);
//接口枚举
typedef enum {
CWSMSSEND=0,//短信验证码发送
CWUSERREGISTER,//用户注册
CWUSERLOGIN,//用户登录
CWPASSWORDDEAL,//密码修改/找回密码
CWUPDATEUSERINFO,//用户信息修改
CWADDUPDATEDRIVER,//驾驶员信息修改/新增
CWQUERYDRIVER,//驾驶员信息查询
CWDELETEDRIVER,//删除驾驶员信息
CWAPPLYLOAN,//贷款申请
CWQUERYLOANINFO,//贷款信息列表查询
CWDELETELOANINFO ,//撤销贷款请求
CWUPLOADRELATIVE//通讯录上传
} WKNetInterface;
@interface CWSingleSample : NSObject<ASIHTTPRequestDelegate>
+(CWSingleSample *)sharedSingleSample:(UIViewController *)myViewController;
@property (nonatomic,strong) MBProgressHUD* ssHUD;
@property (nonatomic,strong) UIViewController *myViewController;
/**
*请求简化版
*/
-(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock;
-(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withValue:(NSDictionary *)value withFinish:(getDataBlock)dataBlock;
/**
*统一的http请求,参数:请求的标示名称,请求的参数串,请求成功的回调,请求失败的回调
*/
-(void)myNetWork:(WKNetInterface)myInterface withValue:(NSDictionary *)value withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock withError:(getErrorBlock)errorBlock;
/**
* 上传文件
* @param flag 是否需要保存数据
*/
-(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag;
/**
*上传图片
*/
-(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag;
/**
* 文件上传
* @param thUpFilePath 文件路径
* @param url 服务器地址
* @param finishBlock 请求成功
* @param errorBlock 请求错误
*/
-(void)myUploadFile:(NSString *)theUpFilePath withFileUrl:(NSString *)url withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock;
/**
*语音文件下载
* @param url 请求地址
* @param path 下载文件存放的路径
*/
-(void)downLoadVoiceUrl:(NSString *)url withDownloadPath:(NSString *)path;
@end
CWSingleSample.m
//
// CWSingleSample.m
// students
//
// Created by ZKSoft on 14/11/13.
// Copyright (c) 2014年 ZK. All rights reserved.
//
#import "CWSingleSample.h"
@implementation CWSingleSample
static CWSingleSample *sharedSingleSample=nil;
+(CWSingleSample *)sharedSingleSample:(UIViewController *)myViewController{
@synchronized(self)
{
if (!sharedSingleSample){
sharedSingleSample = [[CWSingleSample alloc] init];
sharedSingleSample.myViewController=myViewController;
//初始化进度框,置于当前的View当中
sharedSingleSample.ssHUD = [[MBProgressHUD alloc] initWithView:[[[UIApplication sharedApplication] delegate] window]];
[[[[UIApplication sharedApplication] delegate] window] addSubview:sharedSingleSample.ssHUD];
//如果设置此属性则当前的view置于后台
sharedSingleSample.ssHUD.dimBackground = YES;
}
return sharedSingleSample;
}
}
-(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock{
[self myNetWork:myInterface withValue:nil withUrl:strUrl withFinish:dataBlock withError:nil];
}
-(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withValue:(NSDictionary *)value withFinish:(getDataBlock)dataBlock{
[self myNetWork:myInterface withValue:value withUrl:strUrl withFinish:dataBlock withError:nil];
}
-(void)myNetWork:(WKNetInterface)myInterface withValue:(NSDictionary *)value withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock withError:(getErrorBlock)errorBlock{
//配置请求接口
NSArray *interTemp=@[
@"smsSend",//短信验证码发送
@"userRegister",//用户注册
@"userLogin",//用户登录
@"passwordDeal",//密码修改/找回密码
@"updateUserInfo",//用户信息修改
@"addUpdateDriver",//驾驶员信息修改/新增
@"queryDriver",//驾驶员信息查询
@"deleteDriver",//删除驾驶员信息
@"applyLoan",//贷款申请
@"queryLoanInfo",//贷款信息列表查询
@"deleteLoanInfo",//撤销贷款请求
@"uploadRelative"//通讯录上传
];
value=value==nil?@{}:value;
//配置请求
NSURL *requestUrl=[NSURL URLWithString:CWBaseURLString];
AFHTTPClient *client=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
if (myInterface==CWSMSSEND || myInterface==CWUSERREGISTER || myInterface==CWUSERLOGIN || myInterface==CWPASSWORDDEAL || myInterface==CWUPDATEUSERINFO || myInterface==CWADDUPDATEDRIVER || myInterface==CWQUERYDRIVER || myInterface==CWDELETEDRIVER || myInterface == CWAPPLYLOAN || myInterface==CWQUERYLOANINFO ||myInterface==CWDELETELOANINFO ||myInterface ==CWUPLOADRELATIVE) {
[CWSS.ssHUD setLabelText:@"加载中"];
[CWSS.ssHUD show:YES];
}
if (YES) {//post
NSLog(@"post");
[client postPath:[NSString stringWithFormat:@"TaxiLoanGate/LoanCtrlServlet?action=%@%@",[interTemp objectAtIndex:myInterface],strUrl] parameters:value success:^(AFHTTPRequestOperation *operation,id responseObject){
[CWSS.ssHUD hide:YES];
NSLog(@"url---%@",[[operation request] URL]);
if (dataBlock) {
id tempData=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
if ([[tempData objectForKey:@"success"] isEqualToString:@"0000"]) {
dataBlock(tempData);
}else{
// dataBlock(tempData);
if (myInterface==CWUSERLOGIN || myInterface==CWUSERREGISTER ||myInterface==CWPASSWORDDEAL || myInterface==CWAPPLYLOAN || myInterface==CWDELETELOANINFO || myInterface==CWADDUPDATEDRIVER ||myInterface==CWDELETEDRIVER){
[cwutil myAlertView:[tempData objectForKey:@"respinfo"]];
}else{
NSLog(@"%d--%@",myInterface,[[operation request] URL]);
}
}
}
[CWSS.ssHUD hide:YES];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[CWSS.ssHUD hide:YES];
if (errorBlock) {
errorBlock(error);
}else{
NSLog(@"%d--%@--%@",myInterface,[[operation request] URL],error);
}
}];
}else{//get
[client getPath:[NSString stringWithFormat:@"TaxiLoanGate/LoanCtrlServlet?action=%@%@",[interTemp objectAtIndex:myInterface],strUrl] parameters:value success:^(AFHTTPRequestOperation *operation, id responseObject) {
[CWSS.ssHUD hide:YES];
if (dataBlock) {
dataBlock([NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[CWSS.ssHUD hide:YES];
if (errorBlock) {
errorBlock(error);
}else{
NSLog(@"%d-><-%@--%@",myInterface,[[operation request] URL],error);
}
}];
}
}
/**
* 上传图片
*/
-(void)myUploadFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock{
NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingFormat:@"RemoteUpload.aspx?vercode=123456&operation=iosupload"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
AFHTTPClient *httpClient=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
NSData *imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5);
NSMutableURLRequest *request=[httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData){
[formData appendPartWithFileData:imageData name:@"avatar" fileName:@"avatar.jpg" mimeType:@"image/jpg"];
}];
AFHTTPRequestOperation *operation=[[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWrittrn,long long totalBytesWritten,long long totalBytesExpectedToWrite){
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation start];
}
/**
* 上传文件
* @param flag 是否需要保存数据
*/
-(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag{
NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingString:@""] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[CWSS.ssHUD setLabelText:@"正在上传"];
[CWSS.ssHUD show:YES];
AFHTTPClient *httpClient=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
NSMutableURLRequest *request=[httpClient multipartFormRequestWithMethod:@"POST" path:@"/RemoteUpload.ashx?vercode=123456&operation=iosupload&Filename=head.png" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
NSData *data=UIImageJPEGRepresentation(uploadImage, 0.4);
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory=[paths objectAtIndex:0];
///上传头像
NSString *savedImagePath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"temp_head.jpg"]];
[data writeToFile:savedImagePath atomically:NO];
[formData appendPartWithFileData:data name:@"filename" fileName:savedImagePath mimeType:@"image/jpg"];
}];
AFHTTPRequestOperation *operation=[[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,id responseObject){
if (finishBlock) {
finishBlock([[operation userInfo] objectForKey:@"filename"],[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]);
// if (flag==YES) {
// NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingAllowFragments error:nil];
// NSLog(@"dic---%@",[dic objectForKey:@"data"]);
// if ([[ZKNSUserDefaults initUserDefaults].userDefaults objectForKey:UPLOADIMAGE]) {
// [ZKNSUserDefaults deleteUserDefaultsData:UPLOADIMAGE];
// }
// //保存头像
// [ZKNSUserDefaults createUserDefaultDB:UPLOADIMAGE getArrayData:[dic objectForKey:@"data"]];
// }
NSLog(@"上传成功");
[CWSS.ssHUD setLabelText:@"上传成功"];
[CWSS.ssHUD hide:YES afterDelay:2.0f];
}
} failure:^(AFHTTPRequestOperation *operation,NSError *error){
if (errorBlock) {
errorBlock(error);
NSLog(@"上传失败");
[CWSS.ssHUD setLabelText:@"上传失败"];
[CWSS.ssHUD hide:YES afterDelay:2.0f];
}
}];
[httpClient enqueueHTTPRequestOperation:operation];
}
/**
* 上次用于语音文件的上传
*/
-(void)myUploadFile:(NSString *)theUpFilePath withFileUrl:(NSString *)url withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock{
NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingString:@""] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
AFHTTPClient * client=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
NSMutableURLRequest *fileUpRequest=[client multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"ichat.aspx?vercode=123456%@",url] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSError *error;
[formData appendPartWithFileURL:[NSURL fileURLWithPath:theUpFilePath isDirectory:NO] name:@"file" fileName:@"textMusic.mp3" mimeType:@"audio/mp3" error:&error];
NSLog(@"errorBlock---%@",error);
}];
AFHTTPRequestOperation *fileUploadOp=[[AFHTTPRequestOperation alloc] initWithRequest:fileUpRequest];
[fileUploadOp setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"upload finish ---%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error---%@",error);
}];
[client enqueueHTTPRequestOperation:fileUploadOp];
}
/**
*语音文件下载
* @param url 请求地址
* @param path 下载文件存放的路径
*/
-(void)downLoadVoiceUrl:(NSString *)url withDownloadPath:(NSString *)path{
NSURL *urlString = [NSURL URLWithString:[NSString stringWithFormat:@"%@Download.ashx?vercode=123456%@",CWBaseURLString,url]];
NSLog(@"url---%@",urlString);
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:urlString];
request.delegate=self;
//当request完成时,整个文件会被移动到这里
[request setDownloadDestinationPath:path];
//这个文件已经被下载了一部分
// [request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@%@",NSTemporaryDirectory(),[[[[[data objectForKey:@"data"] objectForKey:@"MsgList"][i] objectForKey:@"Content"] componentsSeparatedByString:@":"][2] stringByReplacingOccurrencesOfString:@"]" withString:@""]]];
[request setAllowResumeForFileDownloads:YES];//是否允许断点下载
[request startSynchronous];
NSLog(@"path---%@",path);
}
#pragma mark ASIHTTPRequestDelegate
-(void)requestFailed:(ASIHTTPRequest *)request{
NSLog(@"下载失败");
}
-(void)requestFinished:(ASIHTTPRequest *)request{
NSLog(@"下载成功");
}
@end
在pch文件中需要定义常量:
#define CWBaseURLString @"http://172.16.128.174:8080/" //网络单例类的调用 #define CWSS [CWSingleSample sharedSingleSample:sharedSingleSample.myViewController]
此次修改:2015-3-27 未完待续...

浙公网安备 33010602011771号