zoukankan      html  css  js  c++  java
  • UI 网络请求(同步GET,同步POST,异步GET,异步POST)具体操作

      1 #import "MainViewController.h"  
      2   
      3 @interface MainViewController ()<NSURLConnectionDataDelegate>  
      4   
      5 @property (nonatomic, retain)UIImageView *imageView;  
      6   
      7 @property (nonatomic, retain)NSMutableData *data;// 可变数据 Data 用于拼接每次接受来的数据块  
      8 @end  
      9   
     10 @implementation MainViewController  
     11   
     12 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
     13 {  
     14     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
     15     if (self) {  
     16         // Custom initialization  
     17     }  
     18     return self;  
     19 }  
     20   
     21 - (void)viewDidLoad  
     22 {  
     23     [super viewDidLoad];  
     24     // Do any additional setup after loading the view.  
     25     self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 280, 280)];  
     26     self.imageView.backgroundColor = [UIColor redColor];  
     27     [self.view addSubview:self.imageView];  
     28     [self.imageView release];  
     29       
     30     UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];  
     31     button1.frame = CGRectMake(20, 320, 120, 40);  
     32     button1.backgroundColor = [UIColor brownColor];  
     33     [button1 setTitle:@"同步 GET" forState:UIControlStateNormal];  
     34     [button1 addTarget:self action:@selector(buttonClicked1:) forControlEvents:UIControlEventTouchUpInside];  
     35     [self.view addSubview:button1];  
     36       
     37       
     38     UIButton *button2 = [UIButton buttonWithType:UIButtonTypeSystem];  
     39     button2.frame = CGRectMake(180, 320, 120, 40);  
     40     button2.backgroundColor = [UIColor brownColor];  
     41     [button2 setTitle:@"同步 POST" forState:UIControlStateNormal];  
     42     [button2 addTarget:self action:@selector(buttonClicked2:) forControlEvents:UIControlEventTouchUpInside];  
     43     [self.view addSubview:button2];  
     44       
     45       
     46     UIButton *button3 = [UIButton buttonWithType:UIButtonTypeSystem];  
     47     button3.frame = CGRectMake(20, 400, 120, 40);  
     48     button3.backgroundColor = [UIColor brownColor];  
     49     [button3 setTitle:@"异步 GET" forState:UIControlStateNormal];  
     50     [button3 addTarget:self action:@selector(buttonClicked3:) forControlEvents:UIControlEventTouchUpInside];  
     51     [self.view addSubview:button3];  
     52       
     53       
     54     UIButton *button4 = [UIButton buttonWithType:UIButtonTypeSystem];  
     55     button4.frame = CGRectMake(180, 400, 120, 40);  
     56     button4.backgroundColor = [UIColor brownColor];  
     57     [button4 setTitle:@"异步 POST" forState:UIControlStateNormal];  
     58     [button4 addTarget:self action:@selector(buttonClicked4:) forControlEvents:UIControlEventTouchUpInside];  
     59     [self.view addSubview:button4];  
     60       
     61 }  
     62   
     63 - (void)buttonClicked1:(UIButton *)button  
     64 {  
     65     // 同步GET  
     66     // 1.拼接网络地址  
     67     NSString *str  = @"http://cdn.gq.com.tw.s3-ap-northeast-1.amazonaws.com/userfiles/images_A1/6954/2011100658141857.jpg"  
     68     ;  
     69     // 2.将地址转化为URL对象  
     70     NSURL *url = [NSURL URLWithString:str];  
     71       
     72     // 3. 创建一个请求(request)  
     73     // 参数1: 请求地址(NSURL)  
     74     // 参数2:给请求选择一个缓存策略  
     75     // 参数3: 请求超时时间  
     76     NSMutableURLRequest *requset = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];  
     77     // 4. 给请求设置 请求方式  
     78     [requset setHTTPMethod:@"GET"];  
     79     // 5. 将请求发送给服务器  
     80       
     81     // 同步连接  
     82     // 参数1:请求(request)  
     83     // 参数2:响应信息  
     84     // 参数3:错误信息  
     85     // 同步连接的方法 会一直等待 数据完整接受之后才继续执行  
     86     NSURLResponse *response = nil;  
     87     NSError *error = nil;  
     88     NSData *data = [NSURLConnection sendSynchronousRequest:requset returningResponse:&response error:&error];  
     89       
     90     //在这里获得的是完整的 data数据  
     91     NSLog(@"服务器响应信息:%@", response);  
     92       
     93     // 使用NSData数据  
     94     UIImage *image = [UIImage imageWithData:data];  
     95     self.imageView.image = image;  
     96     NSLog(@"%@", NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));  
     97   
     98 }  
     99 -(void)dealloc  
    100 {  
    101     [_data release];  
    102     [_imageView release];  
    103     [super dealloc];  
    104 }  
    105 - (void)buttonClicked2:(UIButton *)button  
    106 {  
    107     // 同步POST  
    108     NSString *str = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";  
    109     NSURL *url = [NSURL URLWithString:str];  
    110       
    111     // 创建请求  
    112     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  
    113     // 设置请求方式  
    114     [request setHTTPMethod:@"POST"];  
    115       
    116     // 产生一个body  
    117     NSString *bodyStr = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";  
    118     NSData *data = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];  
    119       
    120     // 设置post请求 附带的数据  
    121     [request setHTTPBody:data];  
    122       
    123     // 同步连接 获取内容  
    124     NSURLResponse *response = nil;  
    125     NSData *dataBack = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
    126     NSLog(@"%@", response);  
    127       
    128     // 测试返回数据内容  
    129     NSString *result = [[NSString alloc] initWithData:dataBack encoding:NSUTF8StringEncoding];  
    130     NSLog(@"%@", result);  
    131   
    132 }  
    133   
    134 - (void)buttonClicked3:(UIButton *)button  
    135 {  
    136     // 异步  
    137     // 1. 产生请求  
    138     NSString *str = @"http://pic13.nipic.com/20110313/2686941_211532129160_2.jpg";  
    139     NSURL *url = [NSURL URLWithString:str];  
    140       
    141     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  
    142       
    143     [request setHTTPMethod:@"GET"];  
    144       
    145     // 2.建立连接  
    146     // 异步联接 不会卡死界面  
    147     // 参数1:设定好的请求  
    148     // 参数2:设定网络请求的代理人  
    149     [NSURLConnection connectionWithRequest:request delegate:self];  
    150       
    151       
    152 }  
    153 // 当收到服务器的响应信息 的时候 调用  
    154 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
    155 {  
    156     // 当每次需要接受新的数据的时候 初始化data属性  
    157     NSLog(@"%s", __FUNCTION__);  
    158     self.data = [NSMutableData data];  
    159 }  
    160 // 当收到服务器发送来的 data数据块 的时候 调用  
    161 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  
    162 {  
    163     NSLog(@"%s", __FUNCTION__);  
    164     [self.data appendData:data];  
    165 }  
    166 // 当数据接受完毕 的时候 调用  
    167 -(void)connectionDidFinishLoading:(NSURLConnection *)connection  
    168 {  
    169     // 调用这个方法 说明 self.data属性已经是一个完整的数据  
    170     NSLog(@"%s", __FUNCTION__);  
    171     UIImage *image = [UIImage imageWithData:self.data];  
    172     self.imageView.image = image;  
    173 }  
    174 - (void)buttonClicked4:(UIButton *)button  
    175 {  
    176     // 异步POST  
    177   
    178     NSString *str = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";  
    179     NSURL *url = [NSURL URLWithString:str];  
    180       
    181     // 创建请求  
    182     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];  
    183     // 设置请求方式  
    184     [request setHTTPMethod:@"POST"];  
    185       
    186     // 设置body  
    187     NSString *bodyStr = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";  
    188     NSData *data = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];  
    189       
    190     // 设置post请求 附带的数据  
    191     [request setHTTPBody:data];  
    192       
    193       
    194       
    195     // 2. 连接  
    196     // block 基础上的异步连接  
    197       
    198       
    199     // 参数1:请求  
    200     // 参数2:返回主线程  
    201     // 参数3:  
    202     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
    203         // 当异步联接完毕 而且 请求但完整的数据(参数data)之后 才执行这个块的内容  
    204           
    205         // 在这个块中 写处理数据的代码 (解析/转化为image/音频/视频)  
    206         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];  
    207         NSLog(@"%@", dic);  
    208     }];  
    209       
    210 }  
    有人说:爱上一座城,是因为城里住着某个人,能够与所爱的人在一起,连光阴都是美的。即便粗茶淡饭,修篱种田,只要有你陪伴就好。那么,找一个青山绿水的地方,寻一处幽静的茅舍,或是云水禅心的庭院,那里有晴朗的阳光和静谧的悠然,还有你明媚的笑脸。掬一捧花香在平淡的日子,握着一路相随的暖意,让爱的馨香在柴米油盐中升腾;在一杯茶的温情里,体味生活的诗意;在一碗粥的清淡中,感受生活的浪漫,每天清晨你和阳光都在,便是我的幸福。——春暖花开 《择一城终老,遇一人白首》
  • 相关阅读:
    .NET Core 首例 Office 开源跨平台组件(NPOI Core)
    ASP.NET Core 导入导出Excel xlsx 文件
    python练习七—P2P下载
    VisualVM远程连接Tomcat
    一次Linux自动化部署尝试
    python练习六—简单的论坛
    shiro实现APP、web统一登录认证和权限管理
    python练习五—简单web应用
    python练习四—简单的聊天软件
    python练习三—解析xml
  • 原文地址:https://www.cnblogs.com/-Eric-Liu/p/5563989.html
Copyright © 2011-2022 走看看