移动开发在路上-- IOS移动开发系列 网络交互四(2)
接着上次的讲,这次我们讲 网络请求的封装 打开创建的项目,让我们一起来继续完成他,
首先我们来创建一个NSobject 的文件


圈住出来的轻一点要注意。千万不要搞错了
创建好之后,开始编写代码,
我们第一不要要先把工程文件引用进来
看图

让后我们定义一下接口 和 一个block
//block定义
typedef void(^RequestFinishBlock)(id result);
@interface ZWJDataService : NSObject //定义接口
+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFinishBlock)block; @end
上图片

打开.m文件
补充说明一下 由于我们这里网络数据是用json格式的所以要解析json还要引用第三方的库,
JSONKit
先导入 JSONkit.h JSONKit.m 两个文件
cocoa 下json开源的类库有很多,其中JSONKit库是非常简单易用而且效率又比较高的。
想要使用JSONKit库来解析json文件,只需要下载JSONKit.h 和JSONKit.m添加到工程中(下载链接);然后加入libz.dylib即可
在扩展一下 讲一下使用方法
1.将json转换为NSDictionary
NSString *string = @"{\"name\": \"My Name\",\"list\": [\"one\",\"two\",\"three\"]}";
NSData* jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *resultsDictionary = [jsonData objectFromJSONData];
2.将NSDictionary转换为 json格式的string
//resultsDic是需要转换的Dictionary
NSString *string = [[NSString alloc] initWithData:[resultsDic JSONData] encoding:NSUTF8StringEncoding];
下面继续回归主题
实现.h文件当中定义的接口
+(ASIHTTPRequest *)requestWithURL:(NSString *)urlstring
params:(NSMutableDictionary *)params
httpMethod:(NSString *)httpMethod
completeBlock:(RequestFinishBlock)block{ }
这个方法的参数我不做注释我想大家根据单词的意思也能大概了解到。之前英语没学好,现在边学习编程还要辅助学习English。。。
下边我们还要做一件定义一个宏基地址
意思就是说我们要访问接口肯定要用到url,那么url里边肯定会有主机地址跟接口的主入口是不变的,边的东西需要我们动态的去加载、变更。
#define BASE_URL @"http://**********/api/"
在这里我的测试地址就不做显示了,大家也可以根据自己的不同的需求来定义自己的接口主体
我这里的url是分为
主体部分 + token + 其他参数 组合而成的
其他参数:我们在接口中已经定义过了他是 NSMutableDictionary 类型的 ,在C#里边是Dictionary键值对字典
params:(NSMutableDictionary *)params
在这里我们必须得遵守oc中的守则才进行参数的命名定义;
拼接URL字符串
//拼接URL字符串
urlstring=[BASE_URL stringByAppendingFormat:@"%@?access_token=aa",urlstring]; NSLog(@"urlStr : %@ ",urlstring);
拼接完成以后,我们为了验证是否正确在打印一下,看一下输出的跟我们接口要的链接是否一致相对应;
接下来,我们要判断请求方式 是GET 还是 POST
我们这里用的是caseInsensitiveCompare ,所以在这里只讲一下caseInsensitiveCompare
NSString *astring01 = @"GET";
NSString *astring02 = @"get";
BOOL result = [astring01 compare:astring02] = = NSOrderedSame;
NSLog(@"result:%d",result);
//NSOrderedSame判断两者内容是否相同 忽略大小写
下边就该进行GET请求字符串的拼接了;
//处理GET请求的参数
NSComparisonResult comparRet1=[httpMethod caseInsensitiveCompare:@"GET"];
if(comparRet1==NSOrderedSame){
NSMutableString *paramsString=[NSMutableString string];
NSArray *allkeys=[params allKeys];
NSLog(@"parms : %@ \r\n",params);
for (int i=; i<params.count; i++) {
NSString *key=[allkeys objectAtIndex:i];
id value=[params objectForKey:key]; [paramsString appendFormat:@"%@=%@",key,value]; if (i<params.count-) {
[paramsString appendFormat:@"&"];
}
NSLog(@"paramsString : %@ ",paramsString); } if (paramsString.length>) {
urlstring=[urlstring stringByAppendingFormat:@"&%@",paramsString];
}
}
NSURL *url=[NSURL URLWithString:urlstring]; NSLog(@"URL : %@ ",url);
完成以后在打印一下 检查一下字符串是否正确
今天先讲到这里,该睡觉了,谢谢大家对我的支持,关注!
如果觉得有用的话,别忘了推荐一下哦,共同学习,共同进步!
作者:zhangwenjian
出处:http://www.cnblogs.com/zhangwenjian
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
移动开发在路上-- IOS移动开发系列 网络交互四(2)的更多相关文章
- 移动开发在路上-- IOS移动开发系列 多线程二
最近太忙没太多的时间,忙碌的码农生活空下来一点时间,都会挤出来看一些技术或者咨询的文章,废话不多说,直奔主题. 接着上一次的继续说. 定时器在多线程的使用 NSRunLoop 是线程相关的基础框架的一 ...
- 移动开发在路上-- IOS移动开发系列 网络交互四(1)
最近一段时间上班忙的没日没夜的,不是披星戴月,就是头天早上出门,第二天早上回家...一直没出处时间来更新博客,码农之苦,说了都是泪,废话不多说,直接本主题,经过之前三篇的讲述,ios开发的东西大家或多 ...
- 移动开发在路上-- IOS移动开发系列 多线程三
这一次说一点概念性的东西,也是为后边做一些基础 HTTP协议的基本概念 http协议的基本概念 全称“超文本传输协议”,浏览器和服务器之间的通信规则 HTTp协议永远都是客户端发起的请求,服务器回送响 ...
- 移动开发在路上-- IOS移动开发系列 多线程一
类似于什么是进程什么是线程在这里我就不多浪费时间了(Google一下什么都有)! 废话不多说先上图,我相信大家都是喜欢看图的人,俗话说得好,求图求真相吗?虽然这里只有屌丝一个但是真相还是会有的... ...
- 移动开发在路上-- IOS移动开发 五 网络请求封装
接着上次的讲,这次我们讲 网络请求的封装 打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- iOS企业级开发初级课程-表视图(13集)
首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...
- ios framework 开发
ios framework 开发 之 参考 ios framework 开发 之 实战 iOS workspace 依次编译多个工程
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
随机推荐
- Hibernate中关于Query返回查询结果是类名的问题
query.list返回的是一个装有类的信息的集合,而不装有数据库信息的集合.如下图 运行结果为: 因为得到的集合是类,所以要将list泛型设为那个类,并且将得到的集合进行.get(x).getx ...
- Springboot中的缓存Cache和CacheManager原理介绍
背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...
- VMware虚拟机添加5个RAID10磁盘并挂载
1.打开虚拟机之前先添加硬盘设备 具体添加方法详见我https://www.cnblogs.com/Ghost-m/p/11707996.html这个博客 制作RAID需要用到madam命令 mdad ...
- 修改 Django Administration
只需要在django项目下的APP下的admin.py重写以下几个变量即可,不需要改django源码 from django.contrib import adminadmin.site.site_t ...
- 删除TFS上的团队项目
Visual Studio 提供了一个工具 在X:\X\Microsoft Visual Studio X\Common7\IDE Visual Studio安装路径 下 TFSDeletepr ...
- Arduino 处理JSON格式的数据
Arduino 处理JSON格式的数据 1.安装 ArduinoJson这个包 2.程序代码 # include <ArduinoJson.h> #define ALINK_BODY_FO ...
- 用java实现“钉钉微应用,免登进入某H5系统首页“功能”
一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首 ...
- iOS核心动画高级技巧 - 3
7. 隐式动画 隐式动画 按照我的意思去做,而不是我说的. -- 埃德娜,辛普森 我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情.但是动画是Core Animation ...
- 阿里云ECS搭建harbor1.6.1仓库
机器信息 Centos 7.4 安装docker yum install docker #启动docker并设置开机自启 systemctl start docker systemctl enable ...
- 微信二维码添加logo
生成带参数的二维码 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有 ...