iOS网络编程-ASIHTTPRequest小例子-数据请求队列

实例:请求队列

我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。

 7

我们直接看看主视图控制器ViewController.h代码如下:

#import “ASIHTTPRequest.h”



#import “ASINetworkQueue.h”



#import “NSNumber+Message.h”



#import “NSString+URLEncoding.h”



 



@interface ViewController : UIViewController



 



@property (weak, nonatomic) IBOutlet UIImageView *imageView1;



@property (weak, nonatomic) IBOutlet UIImageView *imageView2;



@property (strong) ASINetworkQueue  *networkQueue;



 



- (IBAction)onClick:(id)sender;



@end


我们需要引入ASI框架的两个头文件ASIHTTPRequest.h和ASINetworkQueue.h。其中imageView1和 imageView2是与画面对应的两个图片视图控件。还定义了ASINetworkQueue  类型的networkQueue属性。我们直接看看主视图控制器ViewController.m中点击GO按钮调用方法,代码如下:

- (IBAction)onClick:(id)sender {



if (!_networkQueue) {



_networkQueue = [[ASINetworkQueue alloc] init];                       ①



}



// 停止以前的队列



[_networkQueue cancelAllOperations];                                      ②



// 创建ASI队列



[_networkQueue setDelegate:self];



[_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)];      ③



[_networkQueue setRequestDidFailSelector:@selector(requestFailed:)];          ④



[_networkQueue setQueueDidFinishSelector:@selector(queueFinished:)];          ⑤



 



for (int i=1; i<3; i++) {



NSString *strURL = [[NSString alloc] initWithFormat:



@”http://iosbook3/download.php?email=%@&FileName=test%i.jpg”,



@”<你的iosbook1.com用户邮箱>”,i];



NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];



ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];



request.tag = i;                                                  ⑥



[_networkQueue addOperation:request];                                   ⑦



}



[_networkQueue go];                                                   ⑧



}


我们再看看它们的回调方法,代码:

- (void)requestFinished:(ASIHTTPRequest *)request



{



NSData *data = [request responseData];



NSError *eror;



NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data



options:NSJSONReadingAllowFragments error:&eror];



if (!resDict) {



UIImage *img = [UIImage imageWithData:data];



if (request.tag ==1) {                                                ①



_imageView1.image = img;



} else {



_imageView2.image = img;



}



} else {



NSNumber *resultCodeObj = [resDict objectForKey:@"ResultCode"];



NSString *errorStr = [resultCodeObj errorMessage];



UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”错误信息”



message:errorStr



delegate:nil



cancelButtonTitle:@”OK”



otherButtonTitles: nil];



[alertView show];



}



if ([_networkQueue requestsCount] == 0) {                                    ②



[self setNetworkQueue:nil];



}



NSLog(@”请求成功”);



}



- (void)requestFailed:(ASIHTTPRequest *)request                              ③



{



NSError *error = [request error];



NSLog(@”%@”,[error localizedDescription]);



if ([_networkQueue requestsCount] == 0) {



[self setNetworkQueue:nil];



}



NSLog(@”请求失败”);



}



- (void)queueFinished:(ASIHTTPRequest *)request                              ④



{



if ([_networkQueue requestsCount] == 0) {



[self setNetworkQueue:nil];



}



NSLog(@”队列完成”);



}


requestFinished:方法是请求对象成功回调方法,因此有两个请求对象它会被调用两次,在第①行代码中我们根据GO按钮点击事件设定的 请求对象的tag属性,来判断是哪个请求对象的回调。进而加载到显示不同的图片视图。第②代码[_networkQueue requestsCount]可以判断队列中请求对象的个数。

 

你可能感兴趣的:(ASIHTTPRequest)