UI进阶 数据请求
一、HTTP和HTTPS协议
- URL
- URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源,也被称为网址,因特网上标准的资源网址
- URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
- URL的基本格式=协议://主机地址/路径?查询
http://lily:123456@www.google.com/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page - 协议:不同的协议,代表着不同的资源查找方式,资源传输方式
主机地址:存放资源的主机的IP地址(域名)- ftp://(文件传输协议)
- http://(超文本传输协议)
- https://(安全超文本传输协议)
- file://(本地文件协议)
- 路径:资源在主机中的位置
- url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装,可以使用NSURL对象获取相应的参数。
示例:absoluteString: http://lily:123456@www.google.com/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page- host:www.google.com
- user:lily
- password:123456
- port:8080
- query:hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10
- HTTP协议的概念
- HTTP协议,Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
- HTTP的工作原理
- HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。
- 了解C/S模式
- Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序
- Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序
- HTTPS
- HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。 它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。 HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接收方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密
- 了解SSL
- SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道
- HTTP和HTTPS的异同
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
- http和https使用的是完全不同的链接方式,用的端口也不一样,前者是,后者是.
- http的链接很简单,是无状态的.
- https是协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议 要比http安全
二、HTTP协议的常见请求方式
- 请求方式
- GET
- POST
- 两种请求方式异同点
- 相同点:都能给服务器传输数据
- 不同点:
- 给服务器传输数据的方式不同:
GET:通过网址字符串.
POST:通过data - 传输数据的大小:
GET:网址字符串最多255字节.
POST:使用NSData,容量超过1G - 安全性:
GET:所有传输给服务的数据,显示在网址里,类似于密码的明文输入,直接可见.
POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取.
- 给服务器传输数据的方式不同:
三、iOS实现网络编程
- HTTP协议请求如何实现
- 网络请求地址对象NSURL的作用及用法
- 网络请求对象NSURLRequest,NSMutableURLRequest的作用及用法
- 网络链接对象NSURLConnection的作用及用法
- 网络链接协议NSURLConnectionDelegate的作用及用法
- 连接方式
- 同步连接:程序容易出现卡死现象
- GET同步
- POST同步
- 异步连接:等待数据返回
- GET同步
- POST同步
- 异步连接有两种实现方式:
- 设置代理,接收数据
- 实现block
- 同步连接:程序容易出现卡死现象
注意:iOS9引入了新特性App Transport Security(ATS),新特性要求App内访问的网络必须使用HTTPS协议,如果你解析的网络使用的是HTTP协议,解决的方法有两个:
1、在info.plist文件中添加以下代码
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2、可视化
注意:若网址字符串URLString中有类对象,可以使用此方法处理:
[URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
1、同步请求
弊端:会造成卡顿,真正的开发中不建议使用
NSURLConnection在iOS9之后被弃用,在以后的开发中很少见,取而代之的是NSURLSession
- NSURLConnection -- GET同步请求
#pragma mark - 同步GET请求
- (IBAction)getSynchronousRequest:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:GET_URL];
// 2、根据url创建具体的请求(使用缓存策略)
// 参数1:统一资源定位符url
/**
* 参数2:缓存策略(枚举值)
NSURLRequestUseProtocolCachePolicy = 0 基础缓存策略,使用Protocol协议定义。
NSURLRequestReloadIgnoringLocalCacheData = 1 忽略本地的缓存,所有的数据都从网络获取
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4 忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, 忽略本地的缓存,所有的数据都从网络获取
NSURLRequestReturnCacheDataElseLoad = 2, 首先使用缓存,如果没有本地缓存,才从原地址下载
NSURLRequestReturnCacheDataDontLoad = 3, 使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作
NSURLRequestReloadRevalidatingCacheData = 5, 如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载
http://blog.csdn.net/dean19900504/article/details/8134720
*/ // 参数3:设置延迟时间,如果超时,请求终止
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:];
// 3、链接服务器 [NSURLConnection在iOS9之后被弃用,在以后的开发中很少见]
// 参数1:请求对象
// 参数2:存储一些网络请求的信息(一般为包体) 一般为nil
// 参数3:错误信息
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// 4、进行json数据解析
NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"resultDict = %@", resultDict);
}
同步GET请求
- NSURLConnection -- POST同步请求
#pragma mark - 同步POST请求
- (IBAction)postSynchronousRequest:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:POST_URL];
// 2、创建可变的网络请求[post请求必须初始化为可变请求,因为稍后要进行一些内容的设置]
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.5、设置body
// 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
NSString *dataString = POST_BODY;
// 对连接字符串进行编码【千万不能忘记】
NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
// 设置请求格式为POST (POST必须大写)
[request setHTTPMethod:@"POST"];
// 设置请求体(body)
[request setHTTPBody:postData];
// 3、连接服务器
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// 4、解析JSON数据
NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", resultDict);
}同步POST请求
2、异步请求
- NSURLConnection -- GET异步请求
- block方法
#pragma mark - get异步请求
#pragma mark - block方法
- (IBAction)getAsynchronousRequestWithBlock:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:GET_URL];
// 2、创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3、连接服务器
// 参数1:请求对象
// 参数2:线程队列
// 参数3:block
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
// response:是携带的接口信息
// data:请求下来的数据,接下来会使用到
// connectionError:错误信息 if (connectionError == nil) {
// 4、解析
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", dict); // 先开辟子线程解析数据
// 然后在主线程里刷新UI
} }];
}GET异步请求 block方法
- block方法
- NSURLConnection -- GET异步请求
- 代理(delegate)方法 (NSURLConnectionDataDelegate)
#pragma mark - get异步请求
#pragma mark - 代理方法
- (IBAction)getAsynchronousRequestWithDelegate:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:GET_URL];
// 2、创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3、连接服务器,设置代理
[NSURLConnection connectionWithRequest:request delegate:self]; } #pragma mark - NSURLConnectionDataDelegate相关代理方法
#pragma mark - 服务器开始响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
// 初始化数据
self.resultData = [NSMutableData data];
} #pragma mark - 接收数据
// 这个方法会重复执行,将得到的每段数据拼接在一起
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// 数据拼接
[self.resultData appendData:data];
} #pragma mark - 结束服务器
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// 解析数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}GET异步请求 代理(delegate)方法
- 代理(delegate)方法 (NSURLConnectionDataDelegate)
- NSURLConnection -- POST异步请求
- block方法
#pragma mark - post异步请求
#pragma mark - block方法
- (IBAction)postAsynchronousRequestWithBlock:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:POST_URL];
// 2、创建可变网络请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.5、设置body
NSString *dataString = POST_BODY;
// 对连接字符串进行编码
NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
// 设置请求格式为POST
[request setHTTPMethod:@"POST"];
// 设置请求体
[request setHTTPBody:postData];
// 3、连接服务器
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError == nil) {
// 4、解析JSON数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", dict);
}
}]; }POST异步请求 block方法
- block方法
- NSURLConnection -- POST异步请求
- 代理(delegate)方法 (NSURLConnectionDataDelegate)
#pragma mark -post异步请求
#pragma mark - 代理方法
- (IBAction)postAsynchronousRequestWithDelegate:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:POST_URL];
// 2、创建可变网络请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.5、设置body
NSString *dataString = POST_BODY;
// 对连接字符串进行编码
NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
// 设置请求格式为POST
[request setHTTPMethod:@"POST"];
// 设置请求体
[request setHTTPBody:postData];
// 3、代理方法
[NSURLConnection connectionWithRequest:request delegate:self];
}
#pragma mark - NSURLConnectionDataDelegate相关代理方法
#pragma mark - 服务器开始响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
// 初始化数据
self.resultData = [NSMutableData data];
} #pragma mark - 接收数据
// 这个方法会重复执行,将得到的每段数据拼接在一起
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// 数据拼接
[self.resultData appendData:data];
} #pragma mark - 结束服务器
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// 解析数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}POST异步请求 代理(delegate)方法
- 代理(delegate)方法 (NSURLConnectionDataDelegate)
四、iOS7之后请求变化
- NSURLSession
- 在WWDC 2013中,Apple的团队对NSURLConnection进行了重构,并推出了NSURLSession作为替代。
- 支持后台运行的网络任务
- 暂停、停止、重启网络任务,不再需要 NSOpation 封装
- 请求可以使用同样的配置容器
- 不同的 session 可以使用不同的私有存储,block和代理可以同时起作用
- 直接从文件系统上传、下载
- 为了方便程序员使用,苹果提供了一个全局 session
- 所有的 任务(Task) 都是由 Session 发起的
- 所有的任务默认是挂起的,需要 Resume
- 三种工作模式:
- 默认会话模式(default)
- 瞬时会话模式(ephemeral)
- 后台会话模式(background)
- NSURLSession支持的三种任务
- 加载数据(NSURLSessionDataTask)
- 下载(NSURLSessionDownloadTask)
- 上传(NSURLSessionUploadTask)
注:对数据进行加载,使用NSURLSessionDataTask和NSURLSessionTask,没有本质区别;要处理下载任务的使用:NSURLSessionDownloadTask; 要处理上传任务时使用:NSURLSessionUploadTask
- NSURLSession数据任务
- 适合于小的数据访问,例如:
1 JSON
2 XML
3 Plist
4 HTML
5 图像
- 适合于小的数据访问,例如:
- NSURLSession补充知识
- NSURLSessionConfiguration类:用于配置会话的属性,可以通过该类配置会话的工作模式
- NSURLSessionTask类:NSURLSessionTask是一个抽象子类,它有三个子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。这三个类封装了现代应用程序的三个基本网络任务:获取数据,比如JSON或XML,以及上传和下载数据。
- NSURLSessionDelegate和NSURLSessionTaskDelegate协议
- NSURLSession -- GET异步请求
- block方法
- block方法
#pragma mark - get异步请求(block)
- (IBAction)getRequestWithBlock:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:GET_URL];
// 2、创建Session对象
NSURLSession *session = [NSURLSession sharedSession];
// 3、创建task请求任务
// NSURLSession是基于任务去完成相关的事件的。
// NSURLSessionDataTask,所有的任务均放在这里实现。(对数据进行加载,使用NSURLSessionDataTask和NSURLSessionTask,没有本质区别;要处理下载任务的使用:NSURLSessionDownloadTask; 要处理上传任务时使用:NSURLSessionUploadTask)
NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error == nil) {
// 4、解析相关数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}
}];
// 5、核心步骤:启动任务。-- NSURLSessionTask的实例如果不启动,会处于挂起状态,不会走block中实现的内容
[task resume];
}
GET异步请求 block方法
- NSURLSession -- GET异步请求
- 代理(delegate)方法 (NSURLSessionDataDelegate)
#pragma mark - get异步请求(代理)
- (IBAction)getRequestWithDelegate:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:GET_URL];
// 2、创建session
/**
参数1:模式的设置
defaultSessionConfiguration 默认会话模式
ephemeralSessionConfiguration 瞬间会话模式
backgroundSessionConfigurationWithIdentifier: 后台会话模式
*/
// 参数2:代理
// 参数3:线程队列
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
// 4、创建task
NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url]];
// 核心步骤:启动任务
[task resume];
} #pragma mark - NSURLSessionDataDelegate协议的方法实现
// 服务器开始响应
- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler {
// 允许服务器响应,只有允许服务器响应,才会接收到数据
completionHandler(NSURLSessionResponseAllow);
// 初始化data,稍后进行拼接
self.resultData = [NSMutableData data];
} // 接收数据
// 这个方法会进行多次,将得到的每个data拼接到一起
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
// 拼接
[self.resultData appendData:data];
} // 数据接收完成,网络请求结束
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
// 解析数据
if (error == nil) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}
}GET异步请求 代理(delegate)方法
- 代理(delegate)方法 (NSURLSessionDataDelegate)
- NSURLSession -- POST异步请求
- block方法
#pragma mark - post异步请求(block)
- (IBAction)postRequestWithBlock:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:POST_URL];
// 2、创建网络请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.5、设置body
NSString *bodyString = POST_BODY;
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData]; // 3、创建session
NSURLSession *session = [NSURLSession sharedSession];
// 4、创建task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error == nil) {
// 5、解析数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}
}];
// 6、启动任务
[task resume]; }POST异步请求 block方法
- block方法
- NSURLSession -- POST异步请求
- 代理(delegate)方法 (NSURLSessionDataDelegate)
#pragma mark - post异步请求(代理)
- (IBAction)postRequestWithDelegate:(UIButton *)sender {
// 1、创建URL
NSURL *url = [NSURL URLWithString:POST_URL];
// 2、创建网络请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 2.5、设置body
NSString *bodyString = POST_BODY;
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData]; // 3、创建session
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
[task resume]; } #pragma mark - NSURLSessionDataDelegate协议的方法实现
// 服务器开始响应
- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler {
// 允许服务器响应,只有允许服务器响应,才会接收到数据
completionHandler(NSURLSessionResponseAllow);
// 初始化data,稍后进行拼接
self.resultData = [NSMutableData data];
} // 接收数据
// 这个方法会进行多次,将得到的每个data拼接到一起
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
// 拼接
[self.resultData appendData:data];
} // 数据接收完成,网络请求结束
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
// 解析数据
if (error == nil) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"dict = %@", dict);
}
}POST异步请求 代理(delegate)方法
- 代理(delegate)方法 (NSURLSessionDataDelegate)
总结:
HTTP是超文本传输协议,HTTPS是安全超文本传输协议
GET和POST是请求方式
同步,异步是连接方式
网络请求的步骤:1、NSURL;2、NSURLRequest;3、NSURLConnection;4、处理Error或者返回数据
NSURLSession是iOS7中新的网络处理方式,NSURLConnection在iOS较早版本中使用广泛。
UI进阶 数据请求的更多相关文章
- UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天
这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 #pragma mark - ...
- iOS - NetRequest 网络数据请求
1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...
- JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单
JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...
- android UI进阶之用【转】
android UI进阶之用ViewPager实现欢迎引导页面 摘要: ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包.大家搜下即可. ...
- iOS中GET 和 POST 数据请求
iOS中GET 和 POST 网络数据请求 同步请求和异步请求的差别: 1.同步请求,有主线程完成网路请求任务,在数据没有请求之前,用户的所有的交互事件应用都无法处理,会造成一种卡顿现象,影响用户体验 ...
- ios第三方数据请求 UI_15
AppDelegate.m //指定根视图 self.window.rootViewController = [[[UINavigationController alloc]initWithRootV ...
- 一种Android数据请求框架
大部分Android应用一般都涉及到跟server的交互,除非是某些单机应用.既然要跟server打交道,向server请求数据差点儿是必做的事情,或许每家的APP都有一套自己的详细实现逻辑.但我们还 ...
- java 接口自动化测试之数据请求的简单封装
我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...
随机推荐
- 【转】PostgreSQL IP地址访问配置
原文:http://blog.csdn.net/shuaiwang/article/details/1793294 1.PostgreSQL的安装目录,进入data文件夹,打开postgresql.c ...
- [Unity菜鸟] Unity Web Player 相关问题 (待完善)
1. 发布网页版Unity自适应网页大小 发布网页版,Unity3D自适应网页大小.这个问题困扰了我很长时间,今天终于把他解决了,给大家分享一下. 这里用Uinty4.0发布网页版,我去掉了里面的标题 ...
- 201. Bitwise AND of Numbers Range
题目: Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all num ...
- 验证Android用户输入日期
如何验证用户输入的日期是有效还是无效? private Pattern pattern; private Matcher matcher; private static final String DA ...
- 简单的神经元算法实现(python)
参考python代码如下 #perceptron x=[[1 ,0, 0],[1,0,1],[1, 1, 0],[1, 1, 1],[0,0,1],[0,1,0],[0,1,1],[0,0,0]] y ...
- node.js模块之fs文件系统
fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 POSIX 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了异步的和同步的两个版本, 例如读取文件内 ...
- socket.io 使用
socket.io是一个以实现跨浏览器.跨平台的实时应用为目的的项目.针对不同的浏览器版本或者不同客户端会做自动降级处理,选择合适的实现方式(websocket, long pull..),隐藏实现只 ...
- [原]数据库中的partitioning和sharding
1. 如何理解定义 在中文中,partitioning和sharding都有分区的意思.从大的方面来说,这两个词所执行的动作确实也和分区相关.partitioning在很多场合是vertical pa ...
- allegro中数据库检查
1. -------------------- ----
- Android开发之多线程下载、断点续传、进度条和文本显示
代码实现了在Android环境下的多线程下载.断点续传.进度条显示和文本显示百分数: import java.io.BufferedReader; import java.io.File; impor ...