OC-NSURLConnection-同步get、异步get、同步post、异步post
来源:互联网 发布:舞台剧网络营销策划书 编辑:程序博客网 时间:2024/06/06 22:07
NSURLConnection的常用类
NSURL:请求地址NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法、请求头、请求体....NSMutableURLRequest:NSURLRequest的子类NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据
使用 NSURLConnection 分别实现同步get、异步get、同步post、异步post
首先我们新建一个工程,在UI界面加入一个text,四个button,如图所示:
我们以微博为例,实现接收微博,发送微博。
首先我们找到相关的API,进入新浪公共平台,如图所示:
实现同步get:
//在这之前我们创建一个WeiBoModel类,声明六个属性,分别与最外层字典的每一个元素对应,并声明一个initWithDictionary: 方法@property (nonatomic,strong)NSArray *statuses;@property (nonatomic,strong)NSNumber *hasvisible;@property (nonatomic,strong)NSNumber *previous_cursor;@property (nonatomic,strong)NSNumber *next_cursor;@property (nonatomic,strong)NSNumber *total_number;@property (nonatomic,strong)NSNumber *interval;- (id)initWithDictionary:(NSDictionary *)dictionary;
- (IBAction)synchronizedGet:(UIButton *)sender {NSString *urlstring = @"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00xSFqpCYTVpIB59d7f3a4de0NCrgJ";urlstring = [urlstring stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url = [NSURL URLWithString:urlstring];//创建一个url请求,requestNSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];NSURLResponse *httpUrlResponse;NSError *error;//使用 NSURLConnection 类,和服务器连接,同步过程NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&httpUrlResponse error:&error];//JSON数据格式解析,利用系统提供的API进行JSON数据的解析NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];WeiBoModel *model = [[WeiBoModel alloc] initWithDictionary:dictionary];//逐层找出我们想要的信息,即第一条最新微博里面的textNSString *text = [model.statuses[0]objectForKey:@"text"];self.textView.text = text;}
异步get:
- (IBAction)AsynchronizedGet:(UIButton *)sender {NSString *urlstring = @"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00xSFqpCYTVpIB59d7f3a4de0NCrgJ";urlstring = [urlstring stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url = [NSURL URLWithString:urlstring];//创建一个url请求,requestNSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; *model = [[WeiBoModel alloc]initWithDictionary:dictionary]; NSString *text = [model.statuses[0]objectForKey:@"text"]; dispatch_async(dispatch_get_main_queue(), ^{ self.textView.text = text; }); }];}
实现异步get还有另外一个方法,即使用代理:
- (IBAction)AsynchronizedGet:(UIButton *)sender {NSString *urlstring = @"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00xSFqpCYTVpIB59d7f3a4de0NCrgJ";urlstring = [urlstring stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url = [NSURL URLWithString:urlstring];//创建一个url请求,requestNSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];_connectionGet = [NSURLConnection connectionWithRequest:request delegate:self];}
//因为异步get与与等一下要讲的异步post遵循同一个协议,所以我们必须对不同情况进行区分,我们声明四个全局变量,其中data用于接收数据,connection用于判断{ NSMutableData *_mDataGet; NSMutableData *_mDataPost; NSURLConnection *_connectionGet; NSURLConnection *_connectionPost;}
使用代理来实现异步get,需要遵循 NSURLConnectionDataDelegate 协议,并重写三个方法,如下所示:
//服务器开始响应,准备向客户发送数据- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSLog(@"服务器开始响应,准备向客户发送数据"); if (connection == _connectionGet) { _mDataGet = [NSMutableData data]; }//此处为异步post相关处理 if (connection == _connectionPost) { _mDataPost = [NSMutableData data]; }}
//从服务器接收到数据,并且此方法会执行多次- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{NSLog(@"从服务器接收到数据,并且此方法会执行多次"); if (connection == _connectionGet) { [_mDataGet appendData:data]; }//此处为异步post相关处理 if (connection == _connectionPost) { [_mDataPost appendData:data]; }}
//接受数据完成- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"接受数据完成"); if (connection == _connectionGet) { NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:_mDataGet options:NSJSONReadingAllowFragments error:nil]; WeiBoModel *model = [[WeiBoModel alloc]initWithDictionary:dictionary]; NSString *text = [model.statuses[0]objectForKey:@"text"];//更新UI需要回到主线程//self.textView.text = text;//回到主线程的两种方式[self.textView performSelectorOnMainThread:@selector(setText:) withObject:text waitUntilDone:NO]; dispatch_async(dispatch_get_main_queue(), ^{ self.textView.text = text; }); }//此处为异步post相关处理 if (connection == _connectionPost) { NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:_mDataPost options:NSJSONReadingAllowFragments error:nil]; }}
同步post
- (IBAction)synchronizePost:(UIButton *)sender {NSString *urlString = @"https://api.weibo.com/2/statuses/update.json";urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url = [NSURL URLWithString:urlString];NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:60];//将请求参数转化成NSDataNSString *bodyString = @"status=��&access_token=2.00xSFqpCYTVpIB59d7f3a4de0NCrgJ";NSData *data = [bodyString dataUsingEncoding:4];//post 设置它的方法体[mRequest setHTTPMethod:@"POST"];[mRequest setHTTPBody:data];NSData *resultData = [NSURLConnection sendSynchronousRequest:mRequest returningResponse:nil error:nil];NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:resultData options:NSJSONReadingAllowFragments error:nil];}
异步post
- (IBAction)AsynchronizePost:(UIButton *)sender {NSString *urlString = @"https://api.weibo.com/2/statuses/update.json";urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *url = [NSURL URLWithString:urlString];NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:60];NSString *bodyString = @"status=��&access_token=2.00xSFqpCYTVpIB59d7f3a4de0NCrgJ";NSData *data = [bodyString dataUsingEncoding:4];[mRequest setHTTPMethod:@"POST"];[mRequest setHTTPBody:data];_connectionPost = [NSURLConnection connectionWithRequest:mRequest delegate:self];}//协议遵循的办法已经在上面写出,此处不重复
0 0
- OC-NSURLConnection-同步get、异步get、同步post、异步post
- get post 同步 异步
- 网络请求 同步get 同步post 异步get 异步post
- OC语言 同步get与异步get&同步post与异步post
- ios 同步,异步,get,post
- Okhttp2同步,异步 get,post
- 同步异步与post、get简解
- iOS同步 异步 get post 请求
- GET--POST的同步/异步请求
- iOS网络请求GET&POST,同步&异步
- $.ajax $.getJSON $.get $.post同步异步问题
- OkHttp的get/post同步异步请求
- OKhttp get post 同步 异步 header设置
- UIday1604:get同步/异步 和 post同步/异步 编程实现
- IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法
- UI 网络请求(同步GET,同步POST,异步GET,异步POST)具体操作
- iOS 数据请求 同步get 同步post 异步get 异步post
- 常见的网络请求 同步GET, 同步POST, 异步GET, 异步POST
- APP接口自动化测试JAVA+TestNG之HTTP接口测试实例
- [SCOI2005]互不侵犯King
- C# Word中设置/更改文本方向
- 数据库基本操作
- iOS Button 按钮 设置图片在文字的右边
- OC-NSURLConnection-同步get、异步get、同步post、异步post
- Debian8下安装ftp服务器 Vsftpd服务器配置 ftp图片服务器
- AIM Tech Round 3 (Div. 2)
- input输入子系统详解
- hihocoder #1361 : Playfair密码表
- 剑指-包含min函数的栈
- list_entry头文件无法使用
- http://blog.csdn.net/uncle_guo/article/details/42575013
- 接口自动化测试 – Java+TestNG 测试 Restful Web Service