JSON

IOS学习笔记(16)网络请求,json解析

字号+ 作者:H5之家 来源:H5之家 2016-03-01 17:00 我要评论( )

网络,json,xml通过NSURLConnection实现网络数据下载通过NSURLConnection这个类来创建一个异步的请求NSURLconnection提供了两种方式来实现...

网络,json,xml

 

通过NSURLConnection实现网络数据下载

通过NSURLConnection这个类来创建一个异步的请求

NSURLconnection提供了两种方式来实现链接,一种是同步的,另一种是异步的。异步的链接将会创建一个新的线程,这个线程将会来负责下载的动作。同步的链接将会堵塞当前线程,也就是说会造成当前的主线程堵塞,直到这个同步的线程运行完毕将会继续运行主线程。

同步和异步的主要区别就是运行的时候是否会创建一个新的现成,异步的会穿啊构建一个新的,而同步的并不会。

  为了能够创建一个异步的请求连接,我们需要做如下操作:

1.创建一个NSString类型的URL链接字符串

2.把NSString类型转化成网络可识别的NSURL类型。

3.把我们的URL对象赋值到NSURLRequest对象中,如果是多个连接请求,请使用NSMutableURLRequest。

4.创建一个NSURLConnection的链接实例,然后把我们定义好的URL对象赋值过去。

我们可以创建一个异步的URL连接对象通过 sendAsynchronousRequest:queue:completionHandler 这个方法

这个方法参数如下:

sendAsynchronousRequest 一个NSURLRequest类型请求。

Queue 一个操作队列,wo我们可以很轻松的分配和初始化一个操作队列,然后可以根据我们需求添加到这个方法的参数中。

completionHandler 一个临时堵塞的监听不获取,当我们异步链接的操作完成之后,无论我们的异步操作是否成功,这个对象都能够接到如下三个参数:

1.一个NSURLResopne,这个对象是服务器返回给我们的数据包装对象。2.NSData,可选的,这个是我们通过URL请求返回的数据。3.NSError类型的对象,如果请求中有错误发生。

这个sendAsynchronousRequest:queue:completionHandler方法如果是添加在主线程上的将不会被调用,因此如果你想执行一个跟UI相关的任务,那么你的主线程就会被堵塞。

 

NSString *urlAsString = @"";

NSURL *url = [NSURL URLWithString:urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

[NSURLConnection sendAsynchronousRequest: urlRequest queue:queue completionHandler:^(

    NSURLResponse *response,

    NSData *data,

    NSError *error

){

    if([data length>0] && error == nil){

        NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"HTML = %@",html);

    }else if([data length] == 0 && error == nil){

        NSLog(@"Nothing was downloaded.");

    }else if(error != nil){

        NSLog(@"Error happened = %@",error);

    }

}];

如果你想保存从网络上下载的数据到你的硬盘中,那么你要在完成的block中将使用NSData的适当方法。

 

NSString *urlAsString = @"";

NSURL *url = [NSURL URLWithString:urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

[NSURLConnection sendAsynchronousRequest: urlRequest queue:queue completionHandler:^(

    NSURLResponse *response,

    NSData *data,

    NSError *error

){

    if([data length>0] && error == nil){

       NSString * documentsDir= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];

        NSString *filePath = [documentsDir stringByAppendingPathComponent:@"apple.html"];

        [data writeToFile:filePath atomically:YES];

        NSLog(@"Successfully saved the file to %@",filePath);

    }else if([data length] == 0 && error == nil){

        NSLog(@"Nothing was downloaded.");

    }else if(error != nil){

        NSLog(@"Error happened = %@",error);

    }

}];

 

捕获异步链接中超时的问题

在创建一个URL请求对象并且准备传递给NSURLConnection,设置一下你的超时值。

NSString *urlAsString = @"";

NSURL *url = [NSURL URLWithString:urlAsString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30.0f];

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

[NSURLConnection sendAsynchronousRequest: urlRequest queue:queue completionHandler:^(

    NSURLResponse *response,

    NSData *data,

    NSError *error

){

    if([data length>0] && error == nil){

        NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"HTML = %@",html);

    }else if([data length] == 0 && error == nil){

        NSLog(@"Nothing was downloaded.");

    }else if(error != nil){

        NSLog(@"Error happened = %@",error);

    }

}];

解析的时候超过了30秒,那么运行的时候这个访问对象将会给你一个超时的错误。

 

通过NSURLConnection创建一个同步的下载

 

通过NSURlConnection的sendSynchronousRequest:returningResponse:error:方法创建一个同步的网络连接。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Json.Net学习笔记(十二) 协议解析

    Json.Net学习笔记(十二) 协议解析

    2016-03-01 16:00

  • 未来编程的9大猜想:JavaScript不必亲自编写

    未来编程的9大猜想:JavaScript不必亲自编写

    2016-01-30 13:01

  • Linux学习笔记:MySQL字符集

    Linux学习笔记:MySQL字符集

    2016-01-17 18:24

  • JSON学习笔记 陈建杭个人博客

    JSON学习笔记 陈建杭个人博客

    2016-01-17 12:22

网友点评