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"];
-(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 methodUsingJsonFromSuccessBlock:ary];
}
}failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"Error: %@", error);
}];
}
- (void)methodUsingJsonFromSuccessBlock:(NSArray *)personList {
//周边好友数据源
NSLog(@"peripheralArray : %@", personList);
//有数据了加载列表
[self initPeripheralListView:personList];
}
[self initPeripheralListView:personList];
}
0 0
- AF同步请求,转载原创
- Linux进程同步之记录锁 (转载,非原创)
- af
- af
- AF
- af
- AF 请求 GET POST DownLoad NetStatus
- AF https 请求遇到的坑
- swift3 AF网络post和get请求
- 转载+原创
- 原创+转载
- iOS海哥开发笔记 (海哥原创,iOS 之同步请求、异步请求、GET请求、POST请求 )
- 使用AF的一个简单网络请求封装+ (instancetype)sharedInstance;
- swift代码之路(三)AF网络请求
- swift代码之路(三)AF网络请求
- af网络请求里,刷新tableview,reloaddate方法执行两次
- iOS 基于AF网络请求封装的简易思路
- 网络请求 同步请求
- Unicode与JavaScript详解
- class_register和class_create
- assertion failed: Path for IClasspathEntry must be absolute解决方法
- junit单元测试搭建
- Oracle Merge 使用介绍
- AF同步请求,转载原创
- C++构造函数和析构函数小结
- IOS中get同步异步请求与post同步异步请求
- 用perl写计时器,计算到毫秒精度。
- centos无线网到配置
- 如可在C中使用OpenOffice的SDK中的sequence
- 解决BASH SHELL脚本报错 ‘: not a valid identifier
- Event 10053 执行计划 绑定变量
- js ajax