4_1网络学习第一天后感--网络数据下载

1、网络数据下载包括同步下载和异步下载,一般是使用异步下载,异步下载可以利用NSURLConnection这个类。

2、有关数据格式,有JSON格式(多数)、XML格式。JSON格式如下:

{} 代表字典,[] 代表数组 ,“” 代表字符串 , 100  代表NSNumber

3、分析网络接口

如:@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id="

http://  (地址使用协议)     iappfree.candou.com   (主机地址)     8080  (主机端口)

free/applications/limited(网络程序文件路径) ?currency=rmb&page=1&category_id=  (程序参数)

4、NSURLConnection的同步下载代码:

-(void)testNSURLConnectionSyncDownloadData
{//限免页面接口NSString *urlString=@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id=";//发送同步URL请求//NSURLRequest URL请求对象NSURL *url=[NSURL URLWithString:urlString];NSURLRequest *request=[NSURLRequest requestWithURL:url];NSError *error=nil;NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];if (error==nil) {NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"str = %@",str);}else {NSLog(@"下载失败");}
}

5、NSURLConnection的异步下载代码:

-(void)testNSURLConnectionAsyncDownloadData
{_data=[[NSMutableData alloc]init];//限免页面接口NSString *urlString=@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id=";//发起一个异步URL请求//异步:执行了方法之后,开始下载_connection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] delegate:self startImmediately:YES];}
//下面是<NSURLConnectionDataDelegate>代理方法
//接收到服务器响应执行
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{NSLog(@"接收到服务器响应执行");
}
//接收到数据的时候执行
//注意:当数据比较大,可能会多次执行
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{[_data appendData:data];
}
//当数据下载完成了
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//    NSLog(@"str =%@",[[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding]);//解析JSON (把JSON转化为NSArray或NSDictionaryNSDictionary *dict=[NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];NSArray *appList=dict[@"applications"];for (NSDictionary *appDict in appList) {NSLog(@"name = %@",appDict[@"name"]);}
}
//下载失败
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{NSLog(@"error =%@",error);
}

6、封装NSURLConnection(重点)

先创建一个NSObject类,

#import <Foundation/Foundation.h>@interface ZJHttpRequset : NSObject//data用来保存下载的数据
@property (nonatomic,copy) NSMutableData *data;//传人一个网站,下载完成之后,执行target中action的方法
-(void)requestWithUrl:(NSString *)url target:(id)target action:(SEL)action;@end

#import "ZJHttpRequset.h"
#import "AppModel.h"//消除performSelector的警告
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"//类扩展,有些实例变量内部使用,不想放在头文件,就可以放在类扩展里面。
@interface ZJHttpRequset ()<NSURLConnectionDataDelegate>
{NSURLConnection *_connection;//用来保存存进来的url  target actionNSString *_url;id _target;SEL _action;
}
@end@implementation ZJHttpRequset-(void)requestWithUrl:(NSString *)url target:(id)target action:(SEL)action
{//保存存进来的变量_url=url;_target=target;_action=action;//记住要初始化data!!!_data=[[NSMutableData alloc]init];//发起异步URL请求_connection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] delegate:self startImmediately:YES];
}
//NSURLConnection代理方法
//接收数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{[_data appendData:data];
}//下载完成了,执行方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{if (_target&&[_target respondsToSelector:_action]) {[_target performSelector:_action withObject:self];}//这里面的Object就是这个类本身,目的是把接收到的data传递
}

再传入网络接口,利用这个封装好的NSURLConnection类接收

@implementation ViewController- (void)viewDidLoad
{[super viewDidLoad];//数据接口NSString *urlString=@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id=";//初始化数组(tabelView的数据总数组)_dataArray =[NSMutableArray array];//初始化自封装好的NSURLConnection类_request=[[ZJHttpRequset alloc]init];[_request requestWithUrl:urlString target:self action:@selector(dealDownloadFinish:)];//创建表视图
    [self createTableView];
}//接收完成之后会触发的方法(在自封装的URL类中 使用PerformSelector)
-(void)dealDownloadFinish:(ZJHttpRequset *)request
{//JSON解析,(获得的是数组还是字典,需要在JASON软件中查看)NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:request.data
options:NSJSONReadingMutableContainers error:nil];NSArray *appList=dict[@"applications"];//利用数据模型保存网络接口下的数据,然后把模型添加到tableView总数组for (NSDictionary *appDict in appList) {AppModel *model=[[AppModel alloc]initWithDict:appDict];[_dataArray addObject:model];}//下载完数据,更新了总数组,一定要刷新tableview!!!
    [_tableView reloadData];
}

7、作业

scrollView滑动

//第一步:初始化,从网络接口下载数据
-(void)createScrollView
{_allData1=[NSMutableArray array];//陈奕迅网络接口NSString *urlString=@"http://mapi.damai.cn/hot201303/nindex.aspx?cityid=0&source=10099&version=30602";_request1 =[[LCHttpRequest alloc]init];[_request1 requestUrl:urlString withTarget:self andAction:@selector(scrollViewDownload:)];}
//第二步:下载完成后触发的方法,把下载好的data 存入总数组
-(void)scrollViewDownload:(LCHttpRequest *)request
{NSArray *arr=[NSJSONSerialization JSONObjectWithData:request.data options:NSJSONReadingMutableContainers error:nil];for (NSDictionary *dict in arr) {NSString *str=dict[@"Pic"];[_allData1 addObject:str];}[self loadImage];
}
//第三步:根据下载的总数组,改变ScrollView的contenSize 同时设置其imageView
-(void)loadImage
{_scrollView.contentSize=CGSizeMake(320*_allData1.count, 0);for (int i=0; i<_allData1.count; i++) {UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(320*i, 0, 320, 165)];NSString *str= _allData1[i];[imageView setImageWithURL:[NSURL URLWithString:str]];[_scrollView addSubview:imageView];}//设置pageControl _pageControl.numberOfPages=_allData1.count;_pageControl.enabled=NO;[self.view bringSubviewToFront:_pageControl];_pageControl.pageIndicatorTintColor=[UIColor redColor];//启动定时器,让scroView滑动[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(scrollViewMove) userInfo:nil repeats:YES];
}
//定时器触发的方法
-(void)scrollViewMove
{CGPoint pp=_scrollView.contentOffset;if (pp.x==320*(_allData1.count-1)) {pp.x=0;_scrollView.contentOffset=pp;}else{pp.x+=320;[UIView animateWithDuration:2.0 animations:^{_scrollView.contentOffset=pp;}];}
}
//<UIScrllViewDelegate> 代理方法让pageControl跟着移动
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{int page =scrollView.contentOffset.x/320;_pageControl.currentPage=page;
}

转载于:https://www.cnblogs.com/muer126/p/4385835.html

4_1网络学习第一天后感--网络数据下载相关推荐

  1. 华为网络学习笔记(一) 网络通信协议

    华为网络学习笔记(一) 一.网络通信协议 通讯协议:通讯协议又称通信规程,是指通信双方对数据传送控制的一种约定.约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出 ...

  2. 5G网络学习(一)——5G网络部署及架构详解(未完待续)

    目录 5G网络的部署 5G网络逻辑架构 5G承载网络 5G承载网络总体架构 5G承载网络转发面组网架构 5G 承载转发面技术方案 SPN技术方案 M-OTN技术方案​​​​​​ 5G网络是如何将一个数 ...

  3. 学习完windows网络编程第一章后做的UDPTest程序

    该程序分成Client和Server两部分,在一个solution中,两个Project client会给server分别发送一个ASCII的字符串,一个含有中文字符的Unicode字符串,最后发一个 ...

  4. 跟着学之网络学习第一课(笔记)

    一 WAN:广域网 LAN: 局域网 MAN: 城域网 WLAN:无线局域网 扁平化:小型,不易扩张 层次化:核心层,汇聚层,接入层 二 IP网络三大网:接入网 城域网 广域网 城域网包含核心层 汇聚 ...

  5. 《阿里巴巴编码规范(JAVA)》学习认证考后感

    image.png <阿里巴巴 Java 开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者. 本手册的 ...

  6. 5G网络学习(四)——5G网络中数据包转发模型(未完待续)

    3GPP TS 29.244介绍了控制层面和用户层面节点之间的接口 主要介绍了数据包转发模型及其内部一系列操作. 目录 1.定义缩写 2数据包转发模型 2.1数据包检测规则(PDR) 2.2使用报告的 ...

  7. 复杂网络学习笔记:networkx实现网络的基本拓扑性质

    1.复杂网络的连通性 1.1.无向网络中的巨片 首先考虑地球上所有人类组成的社会网络的连通性:很显然整个网络是不连通的,因为只要有一个人没有朋友或者说只要有一小群人没有除了这群人之外的朋友那么整个网络 ...

  8. 上网课的心得体会1000字_网络学习心得体会 (1000字)

    网络学习心得体会 陈勇 网络教育学习的心得体会 当今的社会是信息的社会, 世界开始全面信息化. 全球化. 为了紧跟时代的脉搏,参加工作多年来,一直没有停止过学习,钻研业务知识,提升业务能 力网络教育的 ...

  9. 用python实现数字图片识别神经网络--启动网络的自我训练流程,展示网络数字图片识别效果

    上一节,我们完成了网络训练代码的实现,还有一些问题需要做进一步的确认.网络的最终目标是,输入一张手写数字图片后,网络输出该图片对应的数字.由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最 ...

最新文章

  1. linux 如何以树形结构显示文件目录结构
  2. 接口中的泛型要怎么写?
  3. vert.x_选择Vert.x的3个理由
  4. python中dataframe合并列名日期到季度_python – 如何在特定日期范围内的pandas列DataFrame中对某些值求和...
  5. Java 注解 拦截器
  6. java 的io流需要学吗_Java Io流怎么学习呢?
  7. WGZX:javaScript 学习心得--1
  8. 8个成语接龙首尾相连_成语接龙(至少8个)
  9. div 显示滚动条的CSS代码
  10. Android GsmCellLocation.getCellLocation返回NULL
  11. 简单几步教会你画出透明丝袜,初学者画出透明质感
  12. 街机模拟器 WinKawaks 及街机 ROM 下载
  13. 联想拯救者 Y7000 Ubuntu 16.04无线网卡驱动安装踩坑教程
  14. _raw_writel, writel_relaxed 和 writel的区别
  15. DDD中的领域拆分和合并
  16. 腾讯云个人账号实名认证图文详情 新手必看教程
  17. oracle 数据泵导出时间,Oracle DMP备份文件使用数据泵expdp/impdp导出导入dmp文件
  18. zcmu-1931 wjw的剪纸
  19. AngularJs错误
  20. 解开硬盘逻辑死锁的一种有效方法 (转)

热门文章

  1. linux系统下安装2080ti驱动,CentOS 7.4 Nvidia GeForce RTX 2080 Ti 显卡驱动安装
  2. df 和 ll 等命令无响应处理
  3. 决策树分类算法matlab,matlab实现的C45分类决策树算法
  4. light4java_Light Weight Component Library for Java
  5. @bean 什么时候执行_写好一个Spring组件的实现步骤是什么?
  6. FPGA学习笔记---二进制码、独热码、格雷码分析对比
  7. NYOJ-背包问题(贪心)
  8. 转:目标检测定位与分割论文阅读心得总结:FCN U-Net R-CNN FR-CNN Faster R-CNN Mask R-CNN
  9. QFile和C语言对文件操作的性能比较.--读取double型二进制数据文件
  10. 电池图标不见了怎么解决