移动开发在路上-- 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开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
随机推荐
- Python数据挖掘入门与实战PDF电子版加源码
Python数据分析挖掘实战讲解和分析PDF加源码 链接: https://pan.baidu.com/s/1SkZR2lGFnwZiQNav-qrC4w 提取码: n3ud 好的资源就要共享,我会一 ...
- spring boot使用注解的方式引入mybatis的SqlSessionDaoSupport
出现这个问题, 说明一点, 我对spring的注解方式的配置只是知道一个皮毛. 没有深入理解. 有时间要把这部分充充电 package com.zhike.qizhi.common.dao; impo ...
- 基于Windows下永久破解jetbrains公司的系列产品(Idea, pycharm,clion,phpstorm)
基于Windows下永久破解jetbrains公司的系列产品(Idea, pycharm,clion,phpstorm): PS : 有能力的建议购买正版,好吧. PS:均针对其对应的2018.3.1 ...
- 从0开始学前端(笔记备份)----HTML部分 Day1 HTML标签
- 使用 Rsync 从 Windows 同步数据到 Linux
为什么要使用 rsync 从 Windows 到 linux 进行同步? 我们经常会面临这种的情况,项目使用 Windows 开发,最终部署在 Linux 上,但有时想要进行测试.维护.迭代版本时操作 ...
- nginx配置路径问题
编译了一个程序放在服务器上,通过nginx配置转发访问.例如在配置下图的地址 d:\wayne\nginxWeb\www: 发现无法正常运行,查看error.log发现是有问题的,当创建文件时,ngi ...
- SQL Server Management Studio 安装流程
数据库的操作需要使用SQL Server Management Studio,不过也可以使用其他的: 下面是安装操作的步骤:如果你下载的压缩包,你需要先解压到一个文件夹里,然后双击setup.exe, ...
- linux运维与实践
1.容器云计算节点负载值高,通过top可以看到Load Average:70.1 71.3 70.8,虚拟机有8个cpu: cpu使用率高导致(R状态)? 同时在top中观察一段时间,消耗cpu最 ...
- [ch02-03] 梯度下降
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 2.3 梯度下降 2.3.1 从自然现象中理解梯度下降 ...
- 胜利点组——“萌猿填词”微信小程序评价
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860 1.根据(不限于)NABCD评论作品的选题; (1).你的创意解决了 ...