AFN同步异步请求

Posted brucemengbm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AFN同步异步请求相关的知识,希望对你有一定的参考价值。

异步请求:

-(BOOL)getOnlyKey1
{
    NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    
    __block bool isTrue = false;
    
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
    NSString *urlstr = [NSString stringWithFormat:@"http://122.225.89.70:28080/try/check"];
    NSURL *url = [NSURL URLWithString:urlstr];
    NSDictionary *dic = @{@"imei":myUUIDStr,@"av":AppVersion};
    [manager POST:urlstr parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
        MyLog(@"%@", operation.responseString);
        NSRange range = [operation.responseString rangeOfString:@"\"msg\":\"0\""];
        if (range.location != NSNotFound) {
            isTrue = true;
        }
        if (!isTrue) {
            SHOWALERT(@"错误", @"您须要联系开发者");
        }
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        MyLog(@"返回失败结果:%@", error.localizedFailureReason);
        SHOWALERT(@"错误", @"请求开发者server失败");
        isTrue = true;
    }];
    return  isTrue;
}

同步请求:

-(BOOL)getOnlyKey2
{
    NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    BOOL isTrue = false;
    NSString *urlstr = [NSString stringWithFormat:@"http://122.225.89.70:28080/try/check"];
    NSURL *url = [NSURL URLWithString:urlstr];
    NSMutableURLRequest *urlrequest = [[NSMutableURLRequest alloc]initWithURL:url];
    urlrequest.HTTPMethod = @"POST";
    NSString *bodyStr = [NSString stringWithFormat:@"imei=%@&av=%@",myUUIDStr, AppVersion];
    NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    urlrequest.HTTPBody = body;
    AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlrequest];
    requestOperation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
    [requestOperation start];
    [requestOperation waitUntilFinished];
    MyLog(@"%@",requestOperation.responseString);
    NSRange range = [requestOperation.responseString rangeOfString:@"\"msg\":\"0\""];
    if (range.location != NSNotFound) {
        isTrue = true;
    }
    if (!isTrue) {
        SHOWALERT(@"错误", @"您须要联系开发者");
    }
    return  isTrue;
}

原生态的同步请求:

-(BOOL)getOnlyKey
{
    NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    
    //应用版本
    NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
    NSString* versionNum =[infoDict objectForKey:@"CFBundleVersion"];
    
    
    NSString *urlString = [NSString stringWithFormat:@"http://122.225.89.70:28080/try/check"];
    NSURL *url = [NSURL URLWithString:urlString];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    [request setHTTPMethod:@"POST"];
    NSString *bodyStr = [NSString stringWithFormat:@"imei=%@&av=%@",myUUIDStr, versionNum];
    //将nstring转换成nsdata
    NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    //MyLog(@"body data %@", body);
    [request setHTTPBody:body];
    NSURLResponse *response = nil;
    NSError *error = nil;
    //第二,三个參数是指针的指针,全部要用取址符,这种方法是同步方法。同步操作没有完毕。后面的代码不会运行。
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    
    //    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    //    MyLog(@"返回结果是:%@", str);
    
    if (error == nil) {  //接受到数据,表示工作正常
        NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        MyLog(@"%@",str);
        NSRange range = [str rangeOfString:@"\"msg\":\"0\""];
        if (range.location != NSNotFound) {
            return true;
        }else{
            return false;
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"出错鸟"
                                                            message:@"您须要联系项目开发者"
                                                           delegate:nil
                                                  cancelButtonTitle:@"确定"
                                                  otherButtonTitles:nil];
            [alert show];
        }
    }
    
    if(error != nil || response == nil)
    {
        return false;
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"错误"
                                                        message:@"登陆失败。网络不稳定"
                                                       delegate:nil
                                              cancelButtonTitle:@"确定"
                                              otherButtonTitles:nil];
        [alert show];
        
        
    }
    
    return false;
}


以上是关于AFN同步异步请求的主要内容,如果未能解决你的问题,请参考以下文章

Ajax同步异步请求

微风·六:RequestOptions:请求方式(同步/异步)探究,及异步方式问题抛出

ajax同步请求与异步请求的区别

OkHttpOkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )

OkHttp使用学习

ajax同步异步