ASIHTTPRequest 封装
来源:互联网 发布:金蝶数据引出错误3275 编辑:程序博客网 时间:2024/05/19 13:06
心乎爱矣,遐不谓矣,中心藏之,何日忘之
iOS 网络请求常用第三方库ASI,使用方便,前一段时间研究一下,以便后用。
调用方法: 一个请求和实现三个协议。
主要步骤:
1. 新建一个.h文件,用于新建枚举型和声明协议
标记post请求状态
////////////////////////////////////////////////////////////////////////////////////////
//TypeDefine.h
////////////////////////////////////////////////////////////////////////////////////////
enum kPostStatus{
kPostStatusNone=0,
kPostStatusBeging=1,
kPostStatusEnded=2,
kPostStatusError=3,
kPostStatusReceiving=4
};
typedef enum kPostStatus kPostStatus;
页面请求ASI接口的标记
enum kBusinessTag
{
kBusinessTagDirectory= 0, //获取通讯录
kBusinessTagRootLogin=1, //首页登录
kBusinessTagGetUnits=2, //获取单位部门
kBusinessTagGetUnitPersons=3, //获取部门人员
kBusinessTagBinding=4, //进行设备绑定
kBusinessTagBindInfo=5, //获取绑定信息
kBusinessTagDynaPass=6, //获取动态密码
kBusinessTagSPLogin=7, //短信平台登录
kBusinessTagSPSendSMS=8, //群发短信
kBusinessTagQXTLogin=9, //企信通登录
kBusinessTagQXTMailList=10, //企信通收件箱
kBusinessTagQXTAttach=11, //企信通附件获取
kBusinessTagQXTMarkRead=12, //企信通标志已读
kBusinessTagQXTAddresses=13, //企信通获取收件人
kBusinessTagSPSmsRecords=14, //短信平台发送记录查询
kBusinessTagQXTSendMail=15, //企信通发送邮件
kBusinessTagVersion=16, //获取系统版本
kBusinessTagHelpInfo=17, //获取帮助文档
kBusinessTagModifySettings=18, //修改设置
kBusinessTagFeedback=19, //意见反馈
kBusinessTagUnlock=20, //解锁
kBusinessTagLog=21 , //记录日志
kBusinessUserIdential=22, //身份验证
kBusinessTagVersion_net=23, //外网获取系统版本
kAttenPubicMessage=24 , //获取发布信息
KsetInfoReadMessage=25, //已读信息回执设置
KFeedBackQuery = 26 //意见反馈查询
};
typedef enum kBusinessTag kBusinessTag;
声明一个协议,这个协议的三个方法在调用的页面实现
@protocol NetworkModuleDelegate<NSObject>
@optional
-(void)beginPost:(kBusinessTag)tag;
-(void)endPost:(GDataXMLDocument*)result business:(NSNumber*)tag;
-(void)errorPost:(NSError*)err business:(NSNumber*)tag;
@end
////////////////////////////////////////////////////////////////////////////////////////
//NetworkModule类
////////////////////////////////////////////////////////////////////////////////////////
2.新建一个网络模块:NetworkModule和 PostRequest
//NetworkModule.h
<ASIHTTPRequestDelegate>{
NSMutableDictionary* queue;
}
+(NetworkModule*)sharedNetworkModule; //单例
-(void)postBusinessReq:(NSString*)xml //UI调用接口
tag:(kBusinessTag)tag
owner:(id<NetworkModuleDelegate>)owner;
-(void)postXML:(NSString*)xml
tag:(kBusinessTag)tag
owner:(id<NetworkModuleDelegate>)owner
url:(NSString*)url;
-(void)cancel:(kBusinessTag)tag;
//NetworkModule.m
- (id)init
{
self = [super init];
if (self) {
queue=[[NSMutableDictionary alloc]init];
}
return self;
}
+ (NetworkModule *)sharedNetworkModule
{
static NetworkModule *gInstance = NULL;
@synchronized(self)
{
if (!gInstance)
gInstance = [self new];
}
return(gInstance);
}
-(void)postBusinessReq:(NSString*)xml //根据网络配置IP
tag:(kBusinessTag)tag
owner:(id<NetworkModuleDelegate>)owner{
NSMutableArray* arr=[[NSMutableArray alloc]init];
if ([[PingResult sharedPingResult]apnSuccess]) {
[arr addObject:APN_IP];
}else if([[PingResult sharedPingResult]intraSuccess]){
[arr addObject:INTRA_IP];
}else{
[arr addObject: INTER_IP];
}
NSString* s=[NSString stringWithFormat:@"SELF LIKE '%@'",server_ip];
NSPredicate* pre=[NSPredicate predicateWithFormat:s];
[arr filterUsingPredicate:pre];
if (arr.count>0){
[self postXML:xml tag:tag owner:owner
url:[NSString stringWithFormat:interface_url,server_ip]];
}else{
if (owner) {
NSError* err=[[NSError alloc]initWithDomain:ErrorDomain
code:7001
userInfo:nil];
[owner errorPost:err business:[NSNumber numberWithInt:tag]];
}
}
[arr release];
}
-(void)postXML:(NSString*)xml //外网地址
tag:(kBusinessTag)tag
owner:(id<NetworkModuleDelegate>)owner
url:(NSString*)url{
PostRequest* req=(PostRequest*)[queue objectForKey:[NSNumber numberWithInt:tag]];
if (req==nil) {
req=[[PostRequest alloc]init];
}
req.businessTag=tag;
req.postStatus=kPostStatusNone;
[queue setObject:req forKey:[NSNumber numberWithInt:tag]];
req.enc=NSUTF8StringEncoding;
req.owner=owner;
req.url=url;
NSLog(@"%s:%@",__FUNCTION__,req.url);
[req postXML:xml delegate:self];
}
-(void)cancel:(kBusinessTag)tag{
PostRequest* req=(PostRequest*)[queue objectForKey:[NSNumber numberWithInt:tag]];
if (req && [req isKindOfClass:[PostRequest class]]) {
[req cancel];
}
}
//请求结束,获取 Response数据
- (void)requestFinished:(ASIHTTPRequest *)request
{
PostRequest* req=(PostRequest*)[queue objectForKey:
[NSNumber numberWithInt:request.tag]];
req.postStatus=kPostStatusEnded;
if (req.owner!=nil) {
SEL sel=@selector(endPost:business:);
if ([req.owner respondsToSelector:sel]) {
NSLog(@"result:==%@",req.result);
[req.owner performSelector:sel withObject:req.result
withObject:[NSNumber numberWithInt: req.businessTag]];
}
}
}
//请求失败,获取 error
- (void)requestFailed:(ASIHTTPRequest *)request
{
PostRequest* req=(PostRequest*)[queue objectForKey:
[NSNumber numberWithInt:request.tag]];
NSError *error = [request error];
NSLog(@"%s,%@",__FUNCTION__,error.userInfo);
if (req.owner!=nil) {
SEL sel=@selector(errorPost:business:);
if ([req.owner respondsToSelector:sel]) {
[req.owner performSelector:sel withObject:error
withObject:[NSNumber numberWithInt: req.businessTag]];
}
}
}
-(void)dealloc{
[queue release];
[super dealloc];
}
////////////////////////////////////////////////////////////////////////////////////////
//PostRequest类
////////////////////////////////////////////////////////////////////////////////////////
//PostRequest.h
@interface PostRequest : NSObject{
ASIHTTPRequest* _request;
id<NetworkModuleDelegate> owner;
}
@property (nonatomic,retain)id<NetworkModuleDelegate> owner;
@property (nonatomic,retain)NSString* url;
@property (assign)kPostStatus postStatus;
@property (assign)kBusinessTag businessTag;
@property (assign)NSStringEncoding enc;
@property (nonatomic,readonly,getter = result)GDataXMLDocument* result;//用于请求后GData解析XML数据
-(void)cancel;
-(void)postXML:(NSString*)xml delegate:(id)delegate;
//PostRequest.m
@implementation PostRequest
@synthesize postStatus;
@synthesize enc=_enc;
@synthesize url;
@synthesize businessTag=_tag;
@synthesize owner;
-(void)cancel{
if (_request!=nil) {
[_request release],_request=nil;
}
}
-(void)setOwner:(id<NetworkModuleDelegate>)_owner{
owner=[_owner retain];
}
-(id<NetworkModuleDelegate>)owner{
return owner;
}
-(void)setEnc:(NSStringEncoding)enc{
_enc=enc;
}
-(NSStringEncoding)enc{
return _enc;
}
-(void)setBusinessTag:(kBusinessTag)businessTag{
_tag=businessTag;
}
-(kBusinessTag)businessTag{
return _tag;
}
-(GDataXMLDocument*)result{
if(postStatus==kPostStatusEnded){
NSData *data = [_request responseData];
NSString* string=[[NSString alloc] initWithData:data encoding:_enc];
NSLog(@"%s\nresponse:%@",__FUNCTION__,string);
GDataXMLDocument* doc=[[GDataXMLDocument alloc] initWithXMLString:
string options:0 error:nil];
return doc;
}else
return nil;
}
-(void)postXML:(NSString*)xml delegate:(id)delegate{
[self cancel];
_request=[[ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]]retain];
[_request setShouldAttemptPersistentConnection:NO];
[_request setResponseEncoding:_enc];
NSMutableDictionary *reqHeaders = [[NSMutableDictionary alloc] init];
[reqHeaders setValue:@"text/xml; charset=UTF-8" forKey:@"Content-Type"];
_request.requestHeaders = reqHeaders;
[reqHeaders release];
NSLog(@"post xml:%@",xml);
//重要
_request.tag=_tag;
[_request appendPostData:[xml dataUsingEncoding:_enc]];
[_request setDelegate:delegate];
postStatus=kPostStatusBeging;
if(self.owner) [self.owner beginPost:self.businessTag];
[_request startAsynchronous];
}
-(void)dealloc{
[owner release],owner=nil;
[_request release];
[super dealloc];
}
////////////////////////////////////////////////////////////////////////////////////////
//请求调用
////////////////////////////////////////////////////////////////////////////////////////
调用地方实现 NetworkModuleDelegate协议
NSString* postXML=SPSmsRecordsXml([[SPLoginInfo sharedSPLoginInfo]account],
[[SPLoginInfo sharedSPLoginInfo]pass],
beginDay,endDay);
[[NetworkModule sharedNetworkModule]postBusinessReq:postXML tag:kBusinessTagSPSmsRecords owner:self];//请求
#pragma mark -NetworkModuleDelegate
-(void)beginPost:(kBusinessTag)tag{
[indicator show:YES];
[indicator showMessage:@"正在获取数据" delay:1];
}
-(void)endPost:(GDataXMLDocument *)result business:(NSNumber*)tag{
if (tag.intValue==kBusinessTagSPSmsRecords) {
records=[[SmsRecordInfo alloc]initWithXMLElement:result.rootElement];
}
[indicator showMessage:@"数据获取成功" delay:1];
}
-(void)errorPost:(NSError *)err business:(NSNumber*)tag{
[indicator showMessage:@"网络错误" delay:1];
}
- ASIHTTPRequest 封装
- ASIHttpRequest封装
- 对于ASIHTTPRequest的封装
- 对ASIHTTPRequest的封装
- 对ASIHTTPRequest的封装
- ASIHTTPRequest的封装
- iOS ASIHttpRequest 封装
- 基于ASIHTTPRequest封装的HttpClient
- asihttprequest 网络请求类封装
- 基于ASIHTTPRequest封装的MyHttpRequest
- 封装 ASIHTTPRequest 多请求管理类
- ASIHTTPRequest的使用——封装
- 封装 ASIHTTPRequest 多请求管理类
- ASIHTTPRequest 对GET POST 请求简单封装
- ASIHTTPRequest
- ASIHTTPRequest
- ASIHTTPRequest
- ASIHTTPRequest
- 面试集锦(链接地址)
- sdjzu 1078
- 《海量数据库解决方案》表的存储结构读后感
- uva 321
- POJ 3268 最短路
- ASIHTTPRequest 封装
- sdjzu 1079
- SGU 180 贪心
- index损坏导致查询异常
- HreoWinGauge2.0组件集应用示例----事件应用
- Core Data
- GDI/GDI+ 绘制网站流量统计报表 总结(3)
- 黑马程序员--09.动态与代理AOP--01【代理的作用与概念】【动态代理与AOP】
- Shell快捷键