#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:];
} return;
} if ([bodyString hasPrefix:@"http"] == NO) {
bodyString = [NSString stringWithFormat:@"%@/%@",HTTPURLPREFIX,bodyString];
} ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:bodyString]];
[request setDelegate:self];
request.timeOutSeconds = ;
[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:] forKey:[bb objectAtIndex:]];
} //传递参数
[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:];
} // }
} //请求失败
- (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:];
}
if (delegate && [delegate respondsToSelector:@selector(NetWorkBackConnectID:BackString:WithNetState:)]) {
[delegate NetWorkBackConnectID:conTag BackString:@"" WithNetState:];
}
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 == ? : NewsView.pageCode];
[[JSNetWork shareNetWork] JSNetWorkWith: Body:ss PostBody:nil Delegate:self];
//先充缓存里面去读取
NSString *cachestr=[self readApiCacheFileName:@"地税新闻列表.txt"];
//只是对上拉信息,读取缓存
if(cachestr.length> &&NewsView.pageCode==){
[self NetWorkBackConnectID: BackString:cachestr WithNetState:];
}
} #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==){ NSDictionary *jsonDic=ASDynamicCast(NSDictionary, [aBackString JSONValue]);
//根据请求的内容判断请求是否成功
if (![[jsonDic getStringByKey:@"dealcode"] isEqualToString:@""]) {
NSLog(@"请求失败-->%@",[jsonDic getStringByKey:@"dealmsg"]);
return;
} //如果是上拉,进行缓存
if (NewsView.pageCode==) {
[self saveApiCacheFileName:@"地税新闻列表.txt" textContent:aBackString Append:NO];
}
if (NewsView.dataArray.count> &&NewsView.pageCode==) {
[NewsView.dataArray removeAllObjects];//向下拉只显示20条,下拉只显示就叠加
} NSArray *contentArray=ASDynamicCast(NSDictionary, [aBackString JSONValue])[@"content"];
[NewsView.dataArray addObjectsFromArray:contentArray];
[NewsView.aTable reloadData]; } }

ios中封装网络请求类的更多相关文章

  1. ios中封装网络和tableview的综合运用

    1:封装网络请求 类 #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" #import ...

  2. iOS中的网络请求 和 网络监测

    1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...

  3. block传值以及利用block封装一个网络请求类

    1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...

  4. 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类

    这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...

  5. React Native中的网络请求fetch和简单封装

    React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问: https://segmentfault.com/a/1190000003810 ...

  6. [iOS微博项目 - 3.3] - 封装网络请求

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装网络请求 1.需求 为了避免代码冗余和对于AFN框架的多处使用导致耦合性太强,所以把网 ...

  7. App 组件化/模块化之路——如何封装网络请求框架

    App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...

  8. 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据

    § 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...

  9. swift开发之--简单封装Alamofire请求类以及简单使用SnapKit

    以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...

随机推荐

  1. Asp.net WebAPI Ioc

    网上关于webapi Ioc 的东西很多,如http://efmvc.codeplex.com/SourceControl/latest#MyFinance.Web/Global.asax.cs 这是 ...

  2. Construct Binary Tree from Preorder and Inorder Traversal leetcode java

    题目: Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume ...

  3. js处理url的技巧和归纳

    var url = 'http://www.deikang.com/index.php?tel=15811296111&status=1&id=100'; var n = url.in ...

  4. 高德地图JS-API (超简单Get新技能√)

    上几章我们研究了百度地图SDK的用法,虽然不难但是配置起来也是相当的繁琐,现在高德LBS开放平台推出了基于HTML5的地图组件,我们可以通过WebView直接用URL 以GET方式进行请求就可以实现位 ...

  5. Word Embedding与Word2Vec

    http://blog.csdn.net/baimafujinji/article/details/77836142 一.数学上的“嵌入”(Embedding) Embed这个词,英文的释义为, fi ...

  6. GPUImage简单滤镜使用(二)

    GPUImage中,提供了许多简单的的常用的滤镜.在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温). 原图像 调整 ...

  7. [Canvas]计时表/秒表

    欲观看效果请点击下载,然后用浏览器打开index.html查看. 本作 Github地址:https://github.com/horn19782016/StopWatch 图例: 代码: <! ...

  8. TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点

    ISO/OSI的网络模型架构 TCP/IP参考模型的层次结果 以太网头部结构 以太网属于数据链路层, 属于最基本的协议结构 IP协议 IP协议为TCP, UDP, ICMP提供最基本的数据传输通路 I ...

  9. javascript链式语法

    因为 jQuery 库的缘故,链式语法在前端界变得非常流行.实际上这是一种非常容易实现的模式.基本上,你只需要让每个函数返回 'this',这样其他函数就可以立即被调用.看看下面的例子. var bi ...

  10. 关于extern "C"(详细剖析)

    [目录] 引言 extern “C”的前世今生 小心门后的未知世界 Q&A c++调用c的方法 c调用c++的方法 在你工作过的系统里,不知能否看到类似下面的代码. 这好像没有什么问题,你应该 ...