• 转:IPhone之ASIFormDataRequest POST操作架构设计/ 处理网络超时问题


    //开启iphone网络开关
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
     
    ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURLURLWithString:host]];
    //超时时间
     
    request.timeOutSeconds = 30;
     
    //定义异步方法
     
    [request setDelegate:self];
    [request setDidFailSelector:@selector(requestDidFailed:)];
    [request setDidFinishSelector:@selector(requestDidSuccess:)];
    
     
    //用户自定义数据   字典类型  (可选)
    request.userInfo = [NSDictionary dictionaryWithObject:method forKey:@"Method"];
    //post的数据
     
    [request appendPostData:[body dataUsingEncoding:NSUTF8StringEncoding]];
     
    
    //开始执行
     
    [request startAsynchronous];
    
    
    
    //执行成功
     
    - (void)requestDidSuccess:(ASIFormDataRequest *)request
    {
    //获取头文件
    NSDictionary *headers = [request responseHeaders];
     
    //获取http协议执行代码
    NSLog(@"Code:%d",[request responseStatusCode]);
     
    if ([delegaterespondsToSelector:@selector(OARequestSuccessed:withResponse:WithData:withHeaders:)])
    {
    //执行委托操作  (架构设计   自选)
    [delegate OARequestSuccessed:method withResponse:[request responseString] WithData:[request responseData] withHeaders:headers];
     
    }
    
    //清空
    if (request)
    {
    [request release];
    }
     
    //关闭网络
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
     
    
    //执行失败
     
    - (void)requestDidFailed:(ASIFormDataRequest *)request{
    //获取的用户自定义内容
    NSString *method = [request.userInfo objectForKey:@"Method"];
    //获取错误数据
    NSError *error = [request error];
     
    if ([delegate respondsToSelector:@selector(OARequestFailed:withError:)]) 
    {
    //执行委托 将错误数据传其他方式(架构设计   自选)
    [delegate OARequestFailed:method withError:error];
    }
     
    if (request) 
    {
    [request release];
    }
     
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
    
    //执行成功函数
     
    - (void)OARequestSuccessed:(NSString *)method withResponse:(NSString *)response WithData:(NSData *)data withHeaders:(NSDictionary *)headers
    {
    
    NSString *responseStr = [[[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding] autorelease];
    //服务返回post后的数据
    NSLog(@"response:\n%@",responseStr);
    }
    
    //执行失败函数
     
    - (void)OARequestFailed:(NSString *)method withError:(NSError *)error
    {
    
    NSLog(@"Error:%@",error);
    
     
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"出错了" message:@"网络连接失败, 请稍后重试." delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil];
    [alert show];
    [alert release];
    }

    我自己的方案:

    // 本类的公共方法 用于通过指定的URL获取数据。
    +(NSString *)getStringbyHTTPURL:(NSString *)url
    {
    selector:@selector(showWaitAlert) userInfo:nil repeats:NO];    //停几秒再执行
        if ([NetWork isWorking]) {
            NSString *encodedURL = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            ASIFormDataRequest *asiHttpRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:encodedURL]];
           
            asiHttpRequest.timeOutSeconds = 30;       //设置网络延迟时间
            [asiHttpRequest setDelegate:self];
            
            NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8);
            
            NSLog(@"url====%@",url);
            NSLog(@"encodedURL====%@",encodedURL);
            
            [asiHttpRequest setStringEncoding:enc];
            [asiHttpRequest startSynchronous];
            NSError *erro = [asiHttpRequest error];
            if (erro) {             //没有错误信息时,返回的是null
                UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"获取数据失败,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
                [alertView show];
                [alertView release];
                return nil;
            }else{
                NSString *strResult = [asiHttpRequest responseString];
                return strResult;
            }
     
        }else {
            UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"无法连接到网络,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
            [alertView show];
            [alertView release];
            return nil;
        }
     }
    
  • 相关阅读:
    js学习之——js编写基本规范
    js学习之——数组的迭代方法
    css透明度设置,兼容所有的浏览器
    Mariadb配置主从复制
    Java枚举类型在switch语句中的正确用法
    Linux安装git
    Linux安装Jdk&Maven
    Postman配置token为全局变量
    Docker容器迁移
    Java获取当前时间到凌晨12点剩余秒数
  • 原文地址:https://www.cnblogs.com/ygm900/p/3110621.html
Copyright © 2020-2023  润新知