ios中封装网络请求类
#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中封装网络请求类的更多相关文章
- ios中封装网络和tableview的综合运用
1:封装网络请求 类 #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" #import ...
- iOS中的网络请求 和 网络监测
1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...
- block传值以及利用block封装一个网络请求类
1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- React Native中的网络请求fetch和简单封装
React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问: https://segmentfault.com/a/1190000003810 ...
- [iOS微博项目 - 3.3] - 封装网络请求
github: https://github.com/hellovoidworld/HVWWeibo A.封装网络请求 1.需求 为了避免代码冗余和对于AFN框架的多处使用导致耦合性太强,所以把网 ...
- App 组件化/模块化之路——如何封装网络请求框架
App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
§ 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...
- swift开发之--简单封装Alamofire请求类以及简单使用SnapKit
以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...
随机推荐
- 如何使用.net访问Access数据库 (转)
前言:今天整理程序,看到之前写的一个Demo,也不知道是从哪里参考的了,写到这里,留作备用吧. 使用.net访问Access数据库:1.BL层:新增一个DataAccess类. Code].Defau ...
- Ios之网络编程NSURLConnection
通过NSURLConnection主要通过四个类进行网络访问:NSURL,NSURLRequest,NSMutableURLRequest,NSURLConnection 一.基本知识 (1)NSUR ...
- 论文列表——text classification
https://blog.csdn.net/BitCs_zt/article/details/82938086 列出自己阅读的text classification论文的列表,以后有时间再整理相应的笔 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十七)Elasticsearch-6.2.2集群安装,组件安装
1.集群安装es ES内部索引原理: <时间序列数据库的秘密(1)—— 介绍> <时间序列数据库的秘密 (2)——索引> <时间序列数据库的秘密(3)——加载和分布式计算 ...
- IntelliJ IDEA 优化总结
1.修改JVM参数 (IntelliJ IDEA 10.0.1包含以上版本不需要设置) 修改idea.exe.vmoptions配置文件调整以下内容:-Xms256m-Xmx384m-XX:MaxPe ...
- firefox chrome ie9,10,11 不支持selectSingleNode和selectNodes的解决方法
firefox并不支持selectSingleNode和selectNodes的解决方法 function test(){ var perid = document.thisForm.PerID.va ...
- DIV+CSS IE6/IE7/IE8/FF兼容问题汇总
1.IE8下兼容问题,这个最好处理,转化成ie7兼容就可以.在头部加如下一段代码,然后只要在IE7下兼容了,IE8下面也就兼容了 <meta http-equiv="x-ua-comp ...
- asp.net正则表达式类的定义
using System; using System.Collections; using System.Reflection; using System.Reflection.Emit; using ...
- javascript数组操作大全,数组方法总汇
1. shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...
- css样式小技巧
1.css样式小技巧 HTML怎样设定使背景图片不随页面滚动而滚动 background-attachment:fixed; 2.实现li a 超过长度内容出现省略号… overflow:hidden ...