同步异步网络请求

#pragma mark请求文本
- (IBAction)getRemoteText:(UIButton *)sender {
    //1.创建url对象
   // NSURL *url=[NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
   
    /*其中缓存策略是个枚举类型包含:
     NSURLRequestUseProtocolCachePolicy(基础策略,一般使用此策略)
     NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
     NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
     NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
     NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
     NSURLRequestReloadRevalidatingCacheData(验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。)*/
    //2.创建
   // NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy: (NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0f];
    //3.使用connection发送同步请求对象
//    NSURLResponse *response;
//    NSError *error;
//    NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//    if (error !=nil) {
//        NSLog(@"error:%@",[error localizedDescription]);
//    }else{
//        NSLog(@"error:%@",response);
//        NSString *str =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//        self.textView.text=str;
//    }
    //HTTP的post方式请求
    //1.创建URL方式请求
    NSURL *url=[NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
    //2.创建request对象
    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy  timeoutInterval:10.0f];
    //指定HTTP为post方式
    [request setHTTPMethod:@"POST"];
    //打包请求参数
    NSString *requestStr=[NSString stringWithFormat:@"type=%@",@"focus-c"];
    NSData *requestData=[requestStr dataUsingEncoding:NSUTF8StringEncoding];
    
    //设置HTTP请求的数据报
    [request setHTTPBody:requestData];
  //3.使用connection发送同步请求对象
    
    NSURLResponse *response;
    NSError *error;
        NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (error !=nil) {
            NSLog(@"error:%@",[error localizedDescription]);
        }else{
            NSLog(@"error:%@",response);
            NSString *str =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            self.textView.text=str;
        }

}
#pragma mark 请求图片
- (IBAction)getRemoteImage:(UIButton *)sender {
    //1.创建url对象
    NSURL *url=[NSURL URLWithString:@"http://pic.nipic.com/2007-11-09/2007119122519868_2.jpg"];
    
    //2.创建
    NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy: (NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0f];
    //3.使用connection对象发送异步请求
   [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue new] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if(connectionError != nil){
            NSLog(@"error:%@",[connectionError localizedDescription]);
        }else{
        //更新
            //使用GCD获取主线程,在主线程中更新UI
            // 更新UI一定要在主线程中更新
            // 使用GCD获取主线程,在主线程中更新UI
            dispatch_async(dispatch_get_main_queue(), ^{
                self.imageView.image = [UIImage imageWithData:data];
            });
        }
    }];
}

时间: 2024-08-08 01:28:54

同步异步网络请求的相关文章

Android中的异步网络请求

本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关姿势.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家:) 1. 同步网络请求 以HTTP的GET请求为例,我们来介绍一下Android中一个基本的同步请求框架的实现.直接贴代码: public class HttpUtils { public static byte[] get(String urlString) { HttpURLConnection urlConne

iOS NSURLConnection和异步网络请求

在日常应用中,我们往往使用AFNetworking等第三方库来实现网络请求部分.这篇文章会简要地介绍一下如何使用NSURLConnection来进行异步的网络请求. 我们先看一个小demo - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString *urlStr = @"http://www.baidu.c

Github 上Top1的Android 异步网络请求框架

今天给大家分享一个github上Top1的Android异步网络请求框架的使用方法,我给大家分享一个它的基本用法. 先来一个简单的get请求 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before reques

iOS开发——post异步网络请求封装

IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异步的,post的请求方式.通过ios的原生函数简单封装.通过这个封装可以方便的访问http服务器,获取数据,也可以容易的异步加载网络图片. 首先新建一个httpHelper类,在这个类里进行封装,封装的函数名称就叫做post,参数有请求的地址url,请求的参数params,返回数据后回调的函数blo

Android之封装好的异步网络请求框架

1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库可以大大的简化操作,它是基于HttpURLConnection,所有的请求都是独立在UI主线程之外,没有通过CommCallback回调方法处理请求结果, 没有了子线程.没有了handle,链式的变成使得代码更加清晰 . 2.特性 支持get.post请求,文件下载,上传

iOS开发--用户点击频繁,多个异步网络请求取消问题?

一.业务环境描述 当一个view同时添加两个tableView为subView的时候,两个tableView分别为mainTable和subTable. 当用户点击mainTable上的某一条数据时,再去发送网络请求subTable中的数据. 存在问题的地方:例如当用户在mainTable上频繁点击各条cell上面的数据时,会出现subTable中数据错乱问题.那么如何取消之前的网络请求呢??? 注:网络请求为异步请求 二.解决方法 1.实例化一个AFHTTPRequestOperationMa

iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

先看一段错误的方法: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSURLSession *session = [NSURLSession sharedSession]; dispatch_queue_t dispatchQueue = dispatch_queue_create("test.queue&qu

NSURLConnection实现异步网络请求

第一步:遵守协议NSURLConnectionDataDelegate 第二步:创建包含请求网址的NSURL类型的对象 NSURL * url = [NSURL URLWithString:PATH]; 第三步:创建NSURLRequest请求 NSURLRequest * request = [NSURLRequest requestWithURL:url]; 第四步:将request对象赋给NSURLCon对象开始异步请求 [NSURLConnection connectionWithReq

Ajax异步网络请求及JSONP跨域

1 // <-----Ajax-----> 2 function loadXMLDoc() { 3 function success(text) { 4 var textarea = document.getElementById('myid'); 5 textarea.value = text; 6 } 7 function fail(code) { 8 var textarea = document.getElementById('myid'); 9 textarea.value = 'E