基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要。

楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求,代码简单,主要是框架搭建。简单来说,就是一个请求类,一个解析类,还有若干数据类。

以下代码以公开的天气查询api为例:

1.网络请求类

我把常用的网络请求方法都封装好了,你只需要写自己的接口,传递apiName,params等参数就可以。

#pragma mark ios请求方式
//ios自带的get请求方式
-(void)getddByUrlPath:(NSString *)path andParams:(NSString *)params andCallBack:(CallBack)callback{ if (params) {
[path stringByAppendingString:[NSString stringWithFormat:@"?%@",params]];
} NSString* pathStr = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"url:%@",pathStr);
NSURL *url = [NSURL URLWithString:pathStr]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{ id jsonData = [NSJSONSerialization JSONObjectWithData:data options: error:Nil];
NSLog(@"%@",jsonData); if ([jsonData isKindOfClass:[NSArray class]]) {
NSDictionary* dic = jsonData[]; callback(dic); }else{
callback(jsonData);
} }); }];
//开始请求
[task resume];
}
//ios自带的post请求方式
-(void)postddByByUrlPath:(NSString *)path andParams:(NSDictionary*)params andCallBack:(CallBack)callback{ NSURL *url = [NSURL URLWithString:path]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSError* error; if ([NSJSONSerialization isValidJSONObject:params]) {
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:&error];
[request setHTTPBody:jsonData]; NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSString* str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"..........%@",str);
id jsonData = [NSJSONSerialization JSONObjectWithData:data options: error:Nil];
if ([jsonData isKindOfClass:[NSArray class]]) {
NSDictionary* dic = jsonData[]; callback(dic); }else{
callback(jsonData);
}
}); }];
//开始请求
[task resume]; }
} #pragma mark 第三方请求方式
//第三方的get请求方式
-(void)getByApiName:(NSString *)apiName andParams:(id)params andCallBack:(CallBack)callback{
[self.manager GET:apiName parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { callback(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { callback(nil); }]; }
//第三方的post请求方式
-(void)postByApiName:(NSString *)apiName andParams:(id)params andCallBack:(CallBack)callback{ [self.manager POST:apiName parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { callback(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { callback(nil); }]; }
//第三方的post上传图片请求方式
-(void)postImageByApiName:(NSString *)apiName andParams:(id)params andImagesArray:(NSArray*)images andBack:(CallBack)callback{
[self.manager POST:apiName parameters:params constructingBodyWithBlock:^(id formData) { for (int i = ; i<images.count; i++) { NSData* imageData = UIImageJPEGRepresentation(images[i], 0.8);
NSString* name =nil;
if (images.count == ) {
name = @"imageFile";
}else{
name = [NSString stringWithFormat:@"file%d",i+];
}
[formData appendPartWithFileData:imageData name:name fileName:[NSString stringWithFormat:@"image.jpg"] mimeType:@"image/jpeg"];
} } success:^(AFHTTPRequestOperation *operation, id responseObject) { callback(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
callback(nil); }];
} -(void)postImageByApiName:(NSString *)apiName andImageName:(NSString*)imageName andParams:(id)params andImage:(UIImage*)image andBack:(CallBack)callback{
NSData* imageData = UIImageJPEGRepresentation(image, 0.8); [self.manager POST:apiName parameters:params constructingBodyWithBlock:^(id formData) {
[formData appendPartWithFileData:imageData name:imageName fileName:[NSString stringWithFormat:@"image.jpg"] mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
callback(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { callback(nil); }];
}

以天气查询为例,自己写个接口,选择请求方式:

-(void)getWeatherCallBack:(CallBack)callback{

    //选择需要的请求方式,我们采用非第三方的get请求,具体情况选择不同的请求方式,都是异步请求

    [self getddByUrlPath:@"http://m.weather.com.cn/data/101190101.html" andParams:nil andCallBack:^(id obj) {

        //json解析
weather* weatherInfo = [WTParseWeather parseWeatherByWeatherDic:obj];
//返回解析后的数据
callback(weatherInfo); }]; }

2 解析类,这个不同的数据要不同的解析类,自己写,这个是天气的例子:

+(weather *)parseWeatherByWeatherDic:(NSDictionary *)Dic{

    NSDictionary* weatherInfoDic = [Dic objectForKey:@"weatherinfo"];

    weather* weaInfo = [[weather alloc]init];

    weaInfo.city = [weatherInfoDic objectForKey:@"city"];
weaInfo.date = [weatherInfoDic objectForKey:@"date_y"];
weaInfo.week = [weatherInfoDic objectForKey:@"week"];
weaInfo.wind = [weatherInfoDic objectForKey:@"wind1"];
weaInfo.weather = [weatherInfoDic objectForKey:@"weather1"];
weaInfo.tip = [weatherInfoDic objectForKey:@"index"]; return weaInfo;
}

3 在请求网络的地方请求

- (void)getNetData{

    [[WTNetWorkingManager shareWTNetWorkingManager]getWeatherCallBack:^(id obj) {

        weather* weaInfo = obj;

        self.weatherInfo = weaInfo;

        [self giveValue];
}];
} - (void)giveValue{ self.city.text = self.weatherInfo.city;
self.date.text = self.weatherInfo.date;
self.week.text = self.weatherInfo.week;
self.wind.text = self.weatherInfo.wind;
self.weather.text = self.weatherInfo.weather;
self.tips.text = self.weatherInfo.tip;
self.tips.userInteractionEnabled=NO;
}

我封装的类可以去我github拿:https://github.com/wangdachui

iOS 自己封装的网络请求,json解析的类的更多相关文章

  1. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  2. Win(Phone)10开发第(3)弹,简单的Demo程序网络请求json解析列表显示

    先分享一个由Json字符串直接生成解析对应的类的工具: jsonclassgenerator14 百度天气接口 下面是由一个小功能(又特么的是天气)的实现,记录下下UAP的流程和结构(其实跟之前一模一 ...

  3. 基于AFNetworking封装的网络请求工具类【原创】

    今天给大家共享一个我自己封装的网络请求类,希望能帮助到大家. 前提,导入AFNetworking框架, 关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在a ...

  4. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  5. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  6. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  7. iOS开发——post异步网络请求封装

    IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异 ...

  8. 移动开发在路上-- IOS移动开发 五 网络请求封装

    接着上次的讲,这次我们讲 网络请求的封装  打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...

  9. iOS项目中的网络请求和上下拉刷新封装

    代码地址如下:http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对 ...

随机推荐

  1. 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard

    目录 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard 正文 对我的启发 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard Sanyam Bhutani 是 M ...

  2. 【翻译】Brewer's CAP Theorem CAP定理

    Brewer's CAP Theorem 原文地址:http://www.julianbrowne.com/article/brewers-cap-theorem Brewer’s (CAP) The ...

  3. webpack简单原理及用法

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  4. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  5. win10下装上virtualbox 以及在virtualbox上装上 ubuntu 12.04

    首先要下载virtual 在win10下可能第一步你就遇到了麻烦 首先刚开始我装的是最新版本的virtualbox 5.0.24.8355 (直接百度就可搜到) 然后可以按照这个教程 http://j ...

  6. PAT乙级(Basic Level)练习题-NowCoder数列总结

    题目描述 NowCoder最近在研究一个数列: F(0) = 7 F(1) = 11 F(n) = F(n-1) + F(n-2) (n≥2) 他称之为NowCoder数列.请你帮忙确认一下数列中第n ...

  7. Alpha冲刺-第三天

    1.1 今日完成任务情况以及遇到的问题. 完成任务情况 杜世康:使用正则表达式对于弹幕文本中的数字,字母,符号,非法字符等过滤. 刘丹,李玉莹:实现主播管理功能 曹莹雯,尹楠: 调用NLPIR/ICT ...

  8. Win2019 preview 版本的安装过程

    1. 加入 windows insider 协议 登录自己的账号 同意 insder 协议. 然后 https://www.microsoft.com/en-us/software-download/ ...

  9. OneZero第四周——预完成功能点统计

    本周OneZero将完成“统计”功能. 功能点统计如下: 1.主页单击记录,进入修改界面,修改记录. 2.主页长按记录,出现删除按钮,删除记录. 3.全部记录按分类进行饼图显示. 4.全部记录按分类进 ...

  10. 原理分析dubbo分布式应用中使用zipkin做链路追踪

    zipkin是什么 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开 ...