AF同步请求,转载原创

来源:互联网 发布:transient java 编辑:程序博客网 时间:2024/05/17 02:45

方法一:

- (void)getWeatherData{    dispatch_async(dispatch_get_global_queue(0, 0), ^{        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];        manager.requestSerializer     = [AFJSONRequestSerializer serializer];        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];        __block dispatch_semaphore_t sem = dispatch_semaphore_create(0);        __block BOOL isSuccess           = NO;        __block NSDictionary *json       = nil;        [manager GET:@"http://www.weather.com.cn/data/sk/101010100.html"          parameters:nil             success:^(NSURLSessionDataTask *task, id responseObject)        {            NSLog(@"加载成功 %@",responseObject);            isSuccess = YES;            if ([responseObject isKindOfClass:[NSDictionary class]]) {                json = responseObject;            }            dispatch_semaphore_signal(sem);        } failure:^(NSURLSessionDataTask *task, NSError *error) {            NSLog(@"加载失败 %@",error);            isSuccess = NO;            dispatch_semaphore_signal(sem);        }];        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);        dispatch_async(dispatch_get_main_queue(), ^{            /* 回到主线程做进一步处理 */            if(isSuccess) {                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"请求成功" message:[NSString stringWithFormat:@"%@",json] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];                [alert show];            }        });    });}

方法二:

- (void)getWeatherData{    dispatch_async(dispatch_get_global_queue(0, 0), ^{        NSCondition *condition = [[NSCondition alloc] init];        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];        manager.requestSerializer     = [AFJSONRequestSerializer serializer];        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];        __block BOOL isSuccess           = NO;        __block NSDictionary *json       = nil;        [manager GET:@"http://www.weather.com.cn/data/sk/101010100.html"          parameters:nil             success:^(NSURLSessionDataTask *task, id responseObject)         {             NSLog(@"加载成功 %@",responseObject);             isSuccess = YES;             if ([responseObject isKindOfClass:[NSDictionary class]]) {                 json = responseObject;             }             [condition lock];             [condition signal];             [condition unlock];         } failure:^(NSURLSessionDataTask *task, NSError *error) {             NSLog(@"加载失败 %@",error);             isSuccess = NO;             [condition lock];             [condition signal];             [condition unlock];         }];        [condition lock];        [condition wait];        [condition unlock];        dispatch_async(dispatch_get_main_queue(), ^{            /* 回到主线程做进一步处理 */            if(isSuccess) {                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"请求成功" message:[NSString stringWithFormat:@"%@",json] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];                [alert show];            }        });    });}
使用上面任意一种方法都可以解决AFNetworking同步请求的操作。需要注意的是,请求要放在异步线程执行,否则会死锁,在请求结束后再回到主线程执行。
方法三:
//搜索周边好友
-(void)getMapcoordinate:(NSString *)myLongitude myLatitudes:(NSString *)myLatitude scopeNum:(NSString *)scopenum pageNum:(NSString *)pagenum pageTotal:(NSString *)pagetotal{
//这里需要注意是http还是json,要不然会报错
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//去掉这句就没有cookie
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSArray *ar = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
NSDictionary *parameters = @{@"lng":myLongitude,@"lat":myLatitude,@"scopeNum":scopenum,@"pageNum":pagenum,@"pageTotal":pagetotal};
NSString *jsessionID = [[NSUserDefaults standardUserDefaults] objectForKey:kSsionid];
NSString *urlString = [NSString stringWithFormat:@"%@%@%@",superURL,@"urlstring;jsessionid=",jsessionID];
[manager POST:urlString parameters:parameters
success:^(AFHTTPRequestOperation *operation,id responseObject) {
NSLog(@"搜索周边成功");
NSString *requestTmp = [NSString stringWithString:operation.responseString];
NSData *resData = [[NSData alloc] initWithData:[requestTmp dataUsingEncoding:NSUTF8StringEncoding]];
//系统自带JSON解析
if(resData!=nil){
_resultDic = [NSJSONSerialization JSONObjectWithData:resData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"周边%@",_resultDic);
NSArray *ary = [_resultDic objectForKey:@"success"];
//接完数据直接走这个方法
[self methodUsingJsonFromSuccessBlock:ary];
}
}failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Error: %@", error);
}];
}
- (void)methodUsingJsonFromSuccessBlock:(NSArray *)personList {
//周边好友数据源
NSLog(@"peripheralArray : %@", personList);
//有数据了加载列表
[self initPeripheralListView:personList];
}

0 0
原创粉丝点击