zoukankan      html  css  js  c++  java
  • 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]可以判断队列中请求对象的个数。

  • 相关阅读:
    【C++】几个简单课本例题
    【汇编】AX内容依次倒排序
    【汇编】课本第三章例题
    【汇编】补码的理解+标志寄存器的相关探索
    【记录】台式机的组装
    【记录】.bin文件 到 .vdi文件的转换教程
    【汇编】1.汇编环境的搭建:DOSBox的安装
    docker的常用命令,以及postgressql的启动
    Docker中容器的备份、恢复和迁移
    C# 常见面试问题汇总
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3000899.html
Copyright © 2011-2022 走看看