IOS开发---菜鸟学习之路--(二)-数据获取

简介: 第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么从网络上获取数据(毕竟现在开发的软件一般都是需要联网来运行的) 所以如果能在一开始就知道 数据连接到底 怎么实现,到底麻烦不麻烦.

第二篇了.

本篇要讲的是数据获取.

为什么将数据获取放在第二篇就讲呢?

因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始.

可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么从网络上获取数据(毕竟现在开发的软件一般都是需要联网来运行的) 所以如果能在一开始就知道 数据连接到底 怎么实现,到底麻烦不麻烦.那么最起码心里有个底,

换言之,我也可以安心的把软件做的好点到时候将数据的那部分模块换成从网络上获取就好了.

好了废话不多说了直接进入正题.(PS:我这边只是把我实现数据获取的方式讲一下,因为我自己也不是很深入的研究,所以数据获取的模块被我弄的非常简单....还是那句话希望不要误人子弟.)

正文:

数据获取的话 我这边使用的数据格式是JSON格式的数据 (不知道JSON的请自行百度)

在一开始实现的时候我是先写个c# 的webservice服务的,然后发现通过我这个方法调用过来之后返回的数据是

XML格式的..这样的话,为了获得里面的数据我还需要再解析XML一遍.非常的麻烦(苦逼的程序员就是怕麻烦的人物啊...)

然后我这边就分析了下数据获取的实现原理...然后就将服务提供换成了 C# 网页中的 一般处理程序 也就是.ashx文件

至于.ashx文件怎么写  请在本文备注部分查看

http://XXXXX.XXXX.XXX/WebServicesForIOS/IOSWebservices.ashx ? 参数....

这个是我们.ashx的地址

{"Result":"True","Data":{"ID":196,"用户名":"dl","密码":"dl","姓名":"dl","角色":"dl","是否是管理员":"True"}}

 这个是返回的数据

 

接下来就直接开始讲OC部分的实现吧

首先大家需要新建一个类.然后继承至NSObject类 就好了

命名的话我是叫 "GetWebInfo"

完成后XCODE会创建两个文件 分别是GetWebInfo.h与GetWebInfo.m

 

首先打开 .h文件

改成这样

#import <Foundation/Foundation.h>

#define WEBADDRESS @"http://XXXXX.XXX.XXX/WebServicesForIOS/IOSWebservices.ashx"

@interface GetWebInfo : NSObject{
    NSString *parameters;
}
@property(nonatomic,retain) NSString *parameters;
-(NSString *)dogetWebInfo;
@end

我这边定义了一个全局的 定量

WEBADDRESS

  一个string类型的变量

parameters

 一个返回string 的方法

-(NSString *)dogetWebInfo;

接下来我来分别讲下这三个的作用

首先是定量 WEBADDRESS  该定量的作用就是配置地址.这样的话 如果我需要访问不同的地址的时候只要修改一下该文件就可以了.至于为什么要这么做呢?相信大家应该都是有很多测试地址和正式地址的..到时候只要修改一下前面的网页链接就可以轻松搞定测试与正式的切换了

然后是parameters   就是参数了 .这边的参数的话我是用很土的办法 由大家自己拼接string然后传递 

大致的格式就是 Method=方法名&参数1名=参数1&参数2名=参数2 这样的拼接 

这样的话 我调用不同的方法 只需要传递 对应的方法名以及所需要的参数就可以了 然后他就会通过 dogetWebInfo来获取数据了.

然后是-(NSString *)dogetWebInfo;  

其实讲了这么多 核心的就是dogetWebInfo方法了 请直接看.m文件

#import "GetWebInfo.h"
@implementation GetWebInfo
@synthesize parameters;
-(NSString *)dogetWebInfo{
    NSURL *url = [NSURL URLWithString:WEBADDRESS];
    NSData *queram=[parameters dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setHTTPBody:queram];
    NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
    NSString *string=[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
    return  string;
}
@end

我来细节的解释下获取数据的实现

我们这边需要用的是 NSURL类 首先是定义Nsurl的地址

然后queram 呢就是我们的参数拉

urlRequest 就是返回类了

然后是定义 他是Post传输还是get传输再然后setHTTPBody的作用呢就是 设置参数.

result 呢就是返回的结果 这边返回的结果呢是NSData类型的

所以最后呢 需要讲result转化为string类型..就可以获得我们的数据了.

之后呢我们就可以对获取过来是json格式的数据进行操作了

当然这边他目前还是nsstring 格式的 我们还需要转换成可以使用的格式..但是简单来讲我们已经完成了数据获取的全部内容了

是不是非常简单呢?嘿嘿就是这么简单!

PS:这边返回的数据 呢是 在网页中打开是什么 获取 获取的就是什么.

大家都知道 如果我们直接在网页中访问webservice的时候他是包含xml 的内容的  实际的内容他会放在<string></string>节点当中

也就是这样分析.所以我才改用.ashx的方法

 

 

备注部分:

这部分呢主要是讲下.ASHX的简单实现

新建完.ashx 文件的话 他回有个默认的方法

然后里面呢会有以个context 变量

我们就可以直接使用这个变量了 

context.Request["变量名"] 这样呢就是获取变量

context.Response.Write("数据");//格式我是用string格式的这样呢就是返回数据了

也很简单.大家可以赶紧去试试吧.

 

 全文就这么多内容了请期待下一篇..下一篇应该会讲解下 如何处理获取过来的nsstring格式的json数据

 

 

 

 

 

目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
33076 80
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17818 24
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36801 22
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24873 15
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36786 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29925 52

热门文章

最新文章