ASI 使用ASIHttpRequest第三方开源库进行信息的下载
导入ASIHttpRequest源码
//创建一个ASI对象
ASIHTTPRequest *request =[ASIHTTPRequestrequestWithURL:url];
//设置代理
request.delegate = self;
//不同request可以通过tag值进行标记
request.tag = 100;
//request执行异步请求数据,默认请求方式为get请求
[request startAsynchronous];
//[request startSynchronous];(同步请求)
#pragma mark - ASI Delegate
//当数据下载完成时,调用此方法
- (void)requestFinished:(ASIHTTPRequest *)request;根据request.responseData来获取数据
//数据下载失败或者没有网络、请求数据超时的时候,调此方法
- (void)requestFailed:(ASIHTTPRequest *)request;
利用系统函数NSURLConnection来接受数据
//用请求的url生成一个请求,请求对象带有请求信息,客户端会将request带给服务端
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//主线程显示UI和子线程请求数据同时进行,在connectionDidFininshLoading方法调用后,将请求的数据自动调给主线程
_urlConnection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];
#pragma mark - conntectionDataDelegate
//当客户端收到服务端对请求的回应时,调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{//NSURLResponse 服务端网络请求回应的基类
//http协议下的回应应该为NSHTTPURLResponse
NSHTTPURLResponse *http = (NSHTTPURLResponse *)response;
//带有服务端回应的状态码(200 代表成功,服务端能满足客户端请求;404 客户端请求的资源服务端没有找到;400 客户端请求的语法错误;500服务器错误)
NSInteger status =[http statusCode];
NSLog(@"status:%d",status);
//清空旧数据
[_downloadDatasetLength:0];
}
//当服务端发送数据的时候,调用此方法,用于接收数据
//如果数据量较大,此方法可能会被执行多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
//将服务端发送过的数据拼接到_downloadData中
[_downloadData appendData:data];
}
//当客户端接收数据完毕后,调用此方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
if (_downloadData) {
//对数据进行后续操作
id result=[NSJSONSerializationJSONObjectWithData:_downloadDataoptions:NSJSONReadingMutableContainerserror:nil];
if ([result isKindOfClass:[NSDictionary class]]) {
NSDictionary *dic = (NSDictionary *)result;
NSLog(@"dic:%@",dic);
NSArray *array = [dic objectForKey:@"users"];
[_dataArray addObjectsFromArray:array];
}
//刷新视图,让tableView利用带有数据的_dataArray进行显示
[self.tableView reloadData];
}
//可以不用json解析数据 之后会对数据的解析做一个详细的介绍
}
由此可见 第三方asi的方法相对的轻松一些