iOS 网络请求类封装
2015-11-18 00:24
537 查看
转载自:http://www.cnblogs.com/gcb999/p/3213601.html
感谢
#import "JSNetWork.h"//asiHttpRequest#import "ASIFormDataRequest.h"//xml 的解析#import "UseXmlParser.h"//判断是否联网#import "Reachability.h"//sbJson,判断json的解析#import "JSON.h"@implementation JSNetWork//创建一个单例+(JSNetWork*)shareNetWork{static JSNetWork *network = NULL;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{network = [[self alloc] init];});return network;}-(NSString*)JiangSuApiCacheFileName:(NSString*)fileName{NSString * cacheFolder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];cacheFolder = [cacheFolder stringByAppendingPathComponent:@"JiangSu"];NSFileManager * fmgr = [NSFileManager defaultManager];if (![fmgr fileExistsAtPath:cacheFolder]){NSError * error;[fmgr createDirectoryAtPath:cacheFolder withIntermediateDirectories:YES attributes:nil error:&error];}cacheFolder = [cacheFolder stringByAppendingPathComponent:fileName];return cacheFolder;}-(NSDictionary*)getURLFromPlistWithKey:(NSString*)plKey{NSString *path = [[NSBundle mainBundle] pathForResource:@"JiangSuURL" ofType:@"plist"];NSDictionary *urlDic = [NSDictionary dictionaryWithContentsOfFile:path];return ASDynamicCast(NSDictionary, [urlDic valueForKey:plKey]);}//网络请求方式--因为是单例所有传递的值要不同 必须加connectId-(void)JSNetWorkWith:(int)connectID Body:(NSString*)bodyString PostBody:(NSString*)postBody Delegate:(id)aDelegate{//判断是否联网if (![self isConnectNetWork]) {UIAlertView *myalert = [[UIAlertView alloc] initWithTitle:nil message:@"请连接网络后再使用" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];myalert.tag = 0x9999;[myalert show];[myalert release];if (aDelegate && [aDelegate respondsToSelector:@selector(NetWorkBackConnectID:BackString:WithNetState:)]) {[aDelegate NetWorkBackConnectID:connectID BackString:nil WithNetState:0];}return;}if ([bodyString hasPrefix:@"http"] == NO) {bodyString = [NSString stringWithFormat:@"%@/%@",HTTPURLPREFIX,bodyString];}ASIFormDataReq4000uest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:bodyString]];[request setDelegate:self];request.timeOutSeconds = 20;[request setRequestMethod:@"POST"];[request addRequestHeader:@"Content-Type" value:@"application/xml;charset=UTF-8;"];NSArray *aa = [postBody componentsSeparatedByString:@"&"];for (NSString *str in aa) {NSArray *bb = [str componentsSeparatedByString:@"="];[request setPostValue:[bb objectAtIndex:1] forKey:[bb objectAtIndex:0]];}//传递参数[request setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%d",connectID],@"tag",aDelegate,@"target", nil]];[request startAsynchronous];}//请求成功- (void)requestFinished:(ASIHTTPRequest *)request{NSDictionary *userInfo = [request userInfo];id delegate = [userInfo objectForKey:@"target"];int conTag = [[userInfo objectForKey:@"tag"] intValue];NSLog(@"\n成功 地址:%@ \n ConnectId = %d 结果 = %@",[[request url] absoluteString],conTag,[request responseString]);NSString *responseString = [request responseString];// if ([responseString hasPrefix:@"<?xml"]) {// responseString = [responseString stringByReplacingOccurrencesOfString:@"\r" withString:@""];// responseString = [responseString stringByReplacingOccurrencesOfString:@"\n" withString:@""];// responseString = [responseString stringByReplacingOccurrencesOfString:@"<?xml version=\"1.0\" encoding=\"GBK\"?>" withString:xmlHeader];//// UseXmlParser *xmlParser = [[UseXmlParser alloc] initWithParserData:[responseString dataUsingEncoding:NSUTF8StringEncoding] target:delegate connectId:conTag];// [xmlParser parser];// [xmlParser release];// }else{NSLog(@"%@",[responseString JSONValue]);//得到数据源,通过代理返回if (delegate && [delegate respondsToSelector:@selector(NetWorkBackConnectID:BackString:WithNetState:)]) {[delegate NetWorkBackConnectID:conTag BackString:responseString WithNetState:0];}// }}//请求失败- (void)requestFailed:(ASIHTTPRequest *)request{NSLog(@"错误信息:%@",[request error]);NSDictionary *userInfo = [request userInfo];id delegate = [userInfo objectForKey:@"target"];#pragma unused(delegate)int conTag = [[userInfo objectForKey:@"tag"] intValue];NSLog(@"\n失败 地址:%@ \n ConnectId = %d 结果 = %@",[[request url] absoluteString],conTag,[request responseString]);if (delegate && [delegate respondsToSelector:@selector(NetWorkBackConnectID:BackDic:WithNetState:)]) {[delegate NetWorkBackConnectID:conTag BackDic:nil WithNetState:0];}if (delegate && [delegate respondsToSelector:@selector(NetWorkBackConnectID:BackString:WithNetState:)]) {[delegate NetWorkBackConnectID:conTag BackString:@"" WithNetState:0];}UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"" message:@"数据请求失败" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];[av show];[av release];}// 判断是否联网-(BOOL)isConnectNetWork{BOOL isExistenceNetwork = YES;Reachability *r = [Reachability reachabilityWithHostName:@"www.baidu.com"];switch ([r currentReachabilityStatus]) {case NotReachable:isExistenceNetwork=NO;NSLog(@"没有网络");break;case ReachableViaWWAN:isExistenceNetwork=YES;NSLog(@"正在使用3G网络");break;case ReachableViaWiFi:isExistenceNetwork=YES;NSLog(@"正在使用wifi网络");break;}return isExistenceNetwork;}//弹出WiFi- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{if (alertView.tag == 0x9999) {[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];// exit(0);}}@end
#pragma mark -请求信息-(void)RentNewsRequest{NSString *ss = [NSString stringWithFormat:@"szzssw/taxCommon.action?code=1001&pagecode=%d&menucode=0300000000",NewsView.pageCode == 0 ? 1 : NewsView.pageCode];[[JSNetWork shareNetWork] JSNetWorkWith:100 Body:ss PostBody:nil Delegate:self];//先充缓存里面去读取NSString *cachestr=[self readApiCacheFileName:@"地税新闻列表.txt"];//只是对上拉信息,读取缓存if(cachestr.length>0 &&NewsView.pageCode==1){[self NetWorkBackConnectID:100 BackString:cachestr WithNetState:0];}}#pragma mark -数据完成信息- (void)NetWorkBackConnectID:(int)connectID BackString:(NSString *)aBackString WithNetState:(int)netState{NewsView.aTable.pullTableIsRefreshing=YES;NewsView.aTable.pullTableIsLoadingMore=YES;NewsView.aTable.pullTableIsRefreshing=NO;NewsView.aTable.pullTableIsLoadingMore=NO;if(connectID==100){NSDictionary *jsonDic=ASDynamicCast(NSDictionary, [aBackString JSONValue]);//根据请求的内容判断请求是否成功if (![[jsonDic getStringByKey:@"dealcode"] isEqualToString:@"0000"]) {NSLog(@"请求失败-->%@",[jsonDic getStringByKey:@"dealmsg"]);return;}//如果是上拉,进行缓存if (NewsView.pageCode==1) {[self saveApiCacheFileName:@"地税新闻列表.txt" textContent:aBackString Append:NO];}if (NewsView.dataArray.count>0 &&NewsView.pageCode==1) {[NewsView.dataArray removeAllObjects];//向下拉只显示20条,下拉只显示就叠加}NSArray *contentArray=ASDynamicCast(NSDictionary, [aBackString JSONValue])[@"content"];[NewsView.dataArray addObjectsFromArray:contentArray];[NewsView.aTable reloadData];}}
相关文章推荐
- Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统
- HttpClient-----4、使用HttpClient进行POST方式通信
- HttpClient-----3、使用HttpClient进行GET方式通信
- HttpClient-----2、使用HTTP的POST方式与网络交互通信
- C#开发基于Http的LaTeX数学公式转换器
- HttpClient-----1、使用HTTP的GET方式读取网络数据
- Android-网络编程
- springmvc在普通类中获取HttpServletRequest对象
- HTTP状态吗
- iOS 9不能使用http
- UIImageview 显示网络图片及问题
- iOS - 网络数据加载等待页面的简单实现
- HTTP协议常用字段
- HTTP 方法GET 和 POST区别
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- Android开发手记(29) 基于Http的LaTeX数学公式转换器
- WIN2003下休眠后无线连接无法连接
- Android Http通信(HttpURLConnection)
- HTTP协议是无状态协议
- Android 网络编程 初级入门(一)