//  AppDelegate.m
// UI2_异步下载
//
// Created by zhangxueming on 15/7/17.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "AppDelegate.h"
#import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
ViewController *root = [[ViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:root];
self.window.rootViewController = nav;
self.window.backgroundColor = [UIColor whiteColor]; return YES;
}
//  ViewController.h
// UI2_异步下载
//
// Created by zhangxueming on 15/7/17.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import <UIKit/UIKit.h> @interface ViewController : UITableViewController <NSURLConnectionDataDelegate> @end //
// ViewController.m
// UI2_异步下载
//
// Created by zhangxueming on 15/7/17.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
// #import "ViewController.h"
#import "UIImageView+WebCache.h" //异步下载:向服务器发送请求后,UI主线程能继续交互,另外单独创建一个线程下载数据 @interface ViewController ()
{
NSURLConnection *_urlConntecion;//建立客户端与服务器的连接
NSMutableArray *_dataList; //数据源
NSMutableData *_receiveData; //存储服务器下发的数据
} @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
_dataList = [NSMutableArray array];
_receiveData = [NSMutableData data];
[self loadDataWithPage:10];
} - (void)loadDataWithPage:(NSInteger)page
{
//1.创建NSURL
NSString *urlString = [NSString stringWithFormat:@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=%ld", page];
NSURL *url = [NSURL URLWithString:urlString]; //2.创建网络请求对象
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; //3.通过NSURLConnection对象实现异步下载数据
_urlConntecion = [[NSURLConnection alloc] initWithRequest:request delegate:self];
} #pragma mark ---NSURLConnectionDataDelegate--- //当客户端接受到服务器的响应,调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//打印状态码
NSLog(@"statusCode = %li", ((NSHTTPURLResponse *)response).statusCode);
//清空数据
[_receiveData setLength:0];
} //当从服务器接受到数据的时候, 调用此方法,如果数据量比较大, 该方法被调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_receiveData appendData:data];
} //当数据完成下载, 调用该方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//数据解析
id result = [NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil];
if ([result isKindOfClass:[NSDictionary class]])
{
NSLog(@"result = %@", result);
NSArray *app = [result objectForKey:@"applications"];
[_dataList addObjectsFromArray:app];
}
else if([result isKindOfClass:[NSArray class]])
{ }
//刷新UI
[self.tableView reloadData];
} //下载数据失败的时候调用该方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
//打印错误信息
NSLog(@"%@", error.localizedDescription);
} #pragma mark ---UITableViewDataSource--- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dataList.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *reuseId = @"cellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseId];
}
//name
//currentPrice
//iconUrl
NSDictionary *dict = _dataList[indexPath.row];
cell.textLabel.text = [dict objectForKey:@"name"];
cell.detailTextLabel.text =[NSString stringWithFormat:@"原价:%@RMB",[dict objectForKey:@"lastPrice"]];
NSString *iconUrl = [dict objectForKey:@"iconUrl"];
//图片异步加载并设置默认图片
[cell.imageView setImageWithURL:[NSURL URLWithString:iconUrl] placeholderImage:[UIImage imageNamed:@"holderImage"]]; return cell;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

UI2_异步下载的更多相关文章

  1. Android多线程分析之五:使用AsyncTask异步下载图像

    Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...

  2. Android多线程分析之一:使用Thread异步下载图像

    Android多线程分析之一:使用Thread异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处   打算整理一下对 Android F ...

  3. WebClient.DownloadFile(线程机制,异步下载文件)

    线程机制(避免卡屏),异步下载文件. 我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件, ...

  4. iOS异步下载下载进度条显示

    说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDo ...

  5. unity下载文件三(http异步下载)

    异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂. 直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控. 1.首先请求下载. ...

  6. Android 中的异步下载

    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...

  7. FtpWebRequest FTP异步下载、异步上传文件

    异步下载: public interface IPrimaryKey<T> { T GetKey(); } public class DownloadInfo : IPrimaryKey& ...

  8. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

  9. android AsyncTask异步下载并更新进度条

    AsyncTask异步下载并更新进度条    //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...

随机推荐

  1. BZOJ1453:[WC]Dface双面棋盘

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://lydsy.com/JudgeOnline/problem. ...

  2. POJ1144(割点入门题)

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11378   Accepted: 5285 Descript ...

  3. Day07:常用模块,面向对象编程(对象&类)及内置函数

    今日内容:1.常用模块2.面向对象编程(*****)    介绍面向对象编程    类    对象3.内置函数------------------------------1.面向过程编程    核心“ ...

  4. JS---设置简易红绿灯

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. openstack 虚拟机添加网卡

    Openstack dashborad是没有给虚拟机添加网卡这个功能的,但是后台是有这行的接口的. 首先我们创建一个虚拟机,这个虚拟机制11.11.11网段的如图:

  6. Advanced R之构造子集

    转发请声明出处:http://www.cnblogs.com/lizichao/p/4794733.html 构造子集 R构造子集的操作功能强大而且速度快.精通构造子集者可以用简洁的方式表达复杂的操作 ...

  7. eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized

    转自:https://blog.csdn.net/zwr_1022/article/details/78583872 解决前的源代码: public class test {public static ...

  8. 原生JS中unshift与shift

    shift() 方法:shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值:用法:arrayObject.shift()如果数组是空的,那么 shift() 方法将不进行任何操作 ...

  9. angular学习的一些Mark

    http://www.cnblogs.com/xianrongbin/p/4104596.html http://angular-ui.github.io/

  10. Struts2&nbsp;+&nbsp;easyui的DataGrid&nbsp;分页

    jsp页面 js代码: $(function() { $('#ff').hide(); $('#tt').datagrid({ title : '信息显示', iconCls : 'icon-save ...