转:IPhone之ASIFormDataRequest POST操作架构设计/ 处理网络超时问题
//开启iphone网络开关 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURLURLWithString:host]]; //超时时间 request.timeOutSeconds = 30; //定义异步方法 [request setDelegate:self]; [request setDidFailSelector:@selector(requestDidFailed:)]; [request setDidFinishSelector:@selector(requestDidSuccess:)]; //用户自定义数据 字典类型 (可选) request.userInfo = [NSDictionary dictionaryWithObject:method forKey:@"Method"]; //post的数据 [request appendPostData:[body dataUsingEncoding:NSUTF8StringEncoding]]; //开始执行 [request startAsynchronous]; //执行成功 - (void)requestDidSuccess:(ASIFormDataRequest *)request { //获取头文件 NSDictionary *headers = [request responseHeaders]; //获取http协议执行代码 NSLog(@"Code:%d",[request responseStatusCode]); if ([delegaterespondsToSelector:@selector(OARequestSuccessed:withResponse:WithData:withHeaders:)]) { //执行委托操作 (架构设计 自选) [delegate OARequestSuccessed:method withResponse:[request responseString] WithData:[request responseData] withHeaders:headers]; } //清空 if (request) { [request release]; } //关闭网络 [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } //执行失败 - (void)requestDidFailed:(ASIFormDataRequest *)request{ //获取的用户自定义内容 NSString *method = [request.userInfo objectForKey:@"Method"]; //获取错误数据 NSError *error = [request error]; if ([delegate respondsToSelector:@selector(OARequestFailed:withError:)]) { //执行委托 将错误数据传其他方式(架构设计 自选) [delegate OARequestFailed:method withError:error]; } if (request) { [request release]; } [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } //执行成功函数 - (void)OARequestSuccessed:(NSString *)method withResponse:(NSString *)response WithData:(NSData *)data withHeaders:(NSDictionary *)headers { NSString *responseStr = [[[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding] autorelease]; //服务返回post后的数据 NSLog(@"response:\n%@",responseStr); } //执行失败函数 - (void)OARequestFailed:(NSString *)method withError:(NSError *)error { NSLog(@"Error:%@",error); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"出错了" message:@"网络连接失败, 请稍后重试." delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil]; [alert show]; [alert release]; }
我自己的方案:
// 本类的公共方法 用于通过指定的URL获取数据。 +(NSString *)getStringbyHTTPURL:(NSString *)url { selector:@selector(showWaitAlert) userInfo:nil repeats:NO]; //停几秒再执行 if ([NetWork isWorking]) { NSString *encodedURL = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; ASIFormDataRequest *asiHttpRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:encodedURL]]; asiHttpRequest.timeOutSeconds = 30; //设置网络延迟时间 [asiHttpRequest setDelegate:self]; NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8); NSLog(@"url====%@",url); NSLog(@"encodedURL====%@",encodedURL); [asiHttpRequest setStringEncoding:enc]; [asiHttpRequest startSynchronous]; NSError *erro = [asiHttpRequest error]; if (erro) { //没有错误信息时,返回的是null UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"获取数据失败,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alertView show]; [alertView release]; return nil; }else{ NSString *strResult = [asiHttpRequest responseString]; return strResult; } }else { UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"无法连接到网络,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alertView show]; [alertView release]; return nil; } }