异步网络请求和JOSN解析

一. 将字符串转化为NSURL的对象

//把字符串的URL封装成NSURL对象

 NSURL * url = [NSURL URLWithString:@"http://www.7160.com//uploads/allimg/140919/9-140919104223.jpg"];

//服务器返回的信息包括图片,视频都是二进制的(NSData)

二.同步下载

//接收二进制

    NSData *data = [NSData dataWithContentsOfURL:url];

 三.NSURLRequest 和NSMutabbleURLRequest

1.二者为继承关系

NSURLRequest不可变的请求对象 请求的url  

NSMutableURLRequest 可变的请求对象

不可变的请求对象一旦创建,url  请求超时的时间都不能更改

 2.初始化一个请求对象

//创建一个不可变的请求对象,用一个Url初始化

NSURLRequest *request = [NSURLRequest requestWithURL:url];

四  NSURLConnection

一、NSURLConnection的常用类

(1)NSURL:请求地址

(2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法、请求头、请求体....

(3)NSMutableURLRequest:NSURLRequest的子类

(4)NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响  应数据

二、NSURLConnection的使用

使用NSURLConnection发送请求的步骤

(1)创建一个NSURL对象,设置请求路径(设置请求路径)

(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(创建请求对象)

(3)使用NSURLConnection发送NSURLRequest(发送请求)

2.代码示例

(1)发送请求的三个步骤:

1.设置请求路径

2.创建请求对象

3.发送请求

三 同步和异步请求

(1)同步请求

     //发送同步请求

     NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];     

(2)发送异步请求

-(void)testNSURLConnection{

    NSString *urlStr = @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id=";    

    _data = [[NSMutableData alloc] init];

    _connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] delegate:self startImmediately:YES];

    NSLog(@"initWithRequest 执行完成");

}

(3)异步请求的代理方法

    //当请求接收到服务器的响应的时候执行该代理方法

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    NSLog(@"已经接收到服务器响应 %@",string1);

}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

//     追加数据

[downLoadData appendData:data];

//    计算下载进度(进度=已经下载的数据的大小/总的数据大小)

  }

//下载完成执行该方法

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

    

//最简单:显示所有应用名字

    //解析 JSON

    //作用:JSON数据转化为NSArray或NSDictionary

    NSDictionary *dict  = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];

     NSArray *appList = [dict valueForKey:@"applications"];

    for (NSDictionary *appDict in appList) {

        //NSLog(@"name = %@",appDict[@"name"]);

        NSLog(@"currentPrice = %@",appDict[@"currentPrice"]);

    }

}

//链接失败执行该方法

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

 五,json 数据解析

//NSJSONSerialization利用该类可以将JSON 数据转换为foundation 的对象字典和数组

NSMutableDictionary * jsonDict = [NSJSONSerialization JSONObjectWithData:downloadData options:NSJSONReadingMutableLeaves error:nil];

//NSJSONReadingMutableContainers: 设置此参加那返回的对象是可以随时添加新的值,也就是 Mutable 类型的对象

    //NSJSONReadingMutableLeaves: 返回的叶子NSString是可变类型的;

    //NSJSONReadingAllowFragments:设置此参数那返回对象是不能再去动态修改的, 如:NSArray NSDictionary

//遇到{} 用字典接收

//遇到[]用数组接收

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

==================1======================== 

JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

1

"firstName":"John"

JSON结构有两种结构

1、对象

2、数组

{"people":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

]

}

字典  数组  字典

{"programmers":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

],

"authors":[

{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},

{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},

{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}

],

"musicians":[

{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},

{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}

]}

原文地址:https://www.cnblogs.com/chenlang/p/4393806.html