zoukankan      html  css  js  c++  java
  • 异步网络请求和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"}

    ]}

  • 相关阅读:
    相关系数的元分析,以及带调节变量的相关系数的元分析(R)
    共有地址网段类别的划分,几个特殊的私有地址,关于子网掩码,网关的小知识 (网络)
    在文件内夹内部建立子文件夹(python)(os)
    晶振, 机器周期,进位 (单片机)
    数码管动态显示,显示从1到9,每一位显示一个数字 (单片机)
    比较R平方的差值,比较两个回归方程的(R)
    react项目控制台报错data.slice.is not function
    useRef源码
    useReducer源码实现
    useContext源码解读
  • 原文地址:https://www.cnblogs.com/chenlang/p/4393806.html
Copyright © 2011-2022 走看看