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 = ...
随机推荐
- Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识W ...
- C#字符串比较
正确写法1 bool bTemplatecontent2 = strtemplateContentInDB.Equals(strTemplateContentInDesignPanel, String ...
- python命令行参数传递JSON串
有点小问题,一是传递的双引号被自动删除了,但是如果用单引号,JSON解析又不认. 所以,最后的方案是,传递单引号,但程序处理时做一个替换,替换成单引号.
- nodejs发送请求
const https = require('https'); var options = { hostname: 'registry.yarnpkg.com', port: 443, path: ' ...
- Hibernate中得fetch
fetch ,可以设置fetch = "select" 和 fetch = "join" 用一对多来举例:fetch = "select"是 ...
- oracle 学习blogs
http://blog.sina.com.cn/s/blog_5dfbafd20100sxv7.html
- register_shutdown_function函数详解--脚本退出时执行回调函数
register_shutdown_function — Register a function for execution on shutdown. ps:Registers a callback ...
- Windows 下 Git 安装与初始配置
官方下载地址:https://git-scm.com/download/win,我下载的最新版是 Git-2.15.1.2-64-bit.exe . Windows 下安装步骤 1.相关信息,直接“ ...
- 微信小程序 - 上传图片(组件)
更新日期: 2019/3/14:首次发布,更新了2018/12/30的UI以及反馈信息获取方式,具体请下载:demo. 2019/3/20:感谢544429676@qq.com指出的现存bug,已修复 ...
- Linux下利用signal函数处理ctrl+c等信号
前言 linux下能够通过信号机制来实现程序的软中断,是一个很实用的编程方法. 我们平时在程序执行的时候按下ctrl-c.ctrl-z或者kill一个进程的时候事实上都等效于向这个进程发送了一个特定信 ...