iOS网络编程-ASIHTTPRequest小例子-数据请求队列
实例:请求队列
我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。
我们直接看看主视图控制器ViewController.h代码如下:
#import“ASIHTTPRequest.h”#import“ASINetworkQueue.h”#import“NSNumber+Message.h”#import“NSString+URLEncoding.h”@interfaceViewController:UIViewController@property(weak,nonatomic)IBOutletUIImageView*p_w_picpathView1;@property(weak,nonatomic)IBOutletUIImageView*p_w_picpathView2;@property(strong)ASINetworkQueue*networkQueue;-(IBAction)onClick:(id)sender;@end
我 们需要引入ASI框架的两个头文件ASIHTTPRequest.h和ASINetworkQueue.h。其中p_w_picpathView1和 p_w_picpathView2是与画面对应的两个图片视图控件。还定义了ASINetworkQueue 类型的networkQueue属性。我们直接看看主视图控制器ViewController.m中点击GO按钮调用方法,代码如下:
-(IBAction)onClick:(id)sender{if(!_networkQueue){_networkQueue=[[ASINetworkQueuealloc]init];①}//停止以前的队列[_networkQueuecancelAllOperations];②//创建ASI队列[_networkQueuesetDelegate:self];[_networkQueuesetRequestDidFinishSelector:@selector(requestFinished:)];③[_networkQueuesetRequestDidFailSelector:@selector(requestFailed:)];④[_networkQueuesetQueueDidFinishSelector:@selector(queueFinished:)];⑤for(inti=1;i<3;i++){NSString*strURL=[[NSStringalloc]initWithFormat:@”http://iosbook3/download.php?email=%@&FileName=test%i.jpg”,@”<你的iosbook1.com用户邮箱>”,i];NSURL*url=[NSURLURLWithString:[strURLURLEncodedString]];ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];request.tag=i;⑥[_networkQueueaddOperation:request];⑦}[_networkQueuego];⑧}
我们再看看它们的回调方法,代码:
-(void)requestFinished:(ASIHTTPRequest*)request{NSData*data=[requestresponseData];NSError*eror;NSDictionary*resDict=[NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragmentserror:&eror];if(!resDict){UIImage*img=[UIImagep_w_picpathWithData:data];if(request.tag==1){①_p_w_picpathView1.p_w_picpath=img;}else{_p_w_picpathView2.p_w_picpath=img;}}else{NSNumber*resultCodeObj=[resDictobjectForKey:@"ResultCode"];NSString*errorStr=[resultCodeObjerrorMessage];UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@”错误信息”message:errorStrdelegate:nilcancelButtonTitle:@”OK”otherButtonTitles:nil];[alertViewshow];}if([_networkQueuerequestsCount]==0){②[selfsetNetworkQueue:nil];}NSLog(@”请求成功”);}-(void)requestFailed:(ASIHTTPRequest*)request③{NSError*error=[requesterror];NSLog(@”%@”,[errorlocalizedDescription]);if([_networkQueuerequestsCount]==0){[selfsetNetworkQueue:nil];}NSLog(@”请求失败”);}-(void)queueFinished:(ASIHTTPRequest*)request④{if([_networkQueuerequestsCount]==0){[selfsetNetworkQueue:nil];}NSLog(@”队列完成”);}
requestFinished: 方法是请求对象成功回调方法,因此有两个请求对象它会被调用两次,在第①行代码中我们根据GO按钮点击事件设定的 请求对象的tag属性,来判断是哪个请求对象的回调。进而加载到显示不同的图片视图。第②代码[_networkQueue requestsCount]可以判断队列中请求对象的个数。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。