UI进阶之数据解析(网络请求NSURLSession)

GET   POST异步block方法

POST:

- (IBAction)post:(id)sender {

    NSURLSession *session = [NSURLSession sharedSession];

    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";

    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";

    NSData *potaData = [dataString dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:potaData];

    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if (error == nil) {

            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            NSLog(@"dic == %@", dic);
        }

    }];

    [task resume];

}

GET:

    //使用block回调方式
    //使用系统提供的全局NSURLSession对象 ,是一个单例
    NSURLSession *session = [NSURLSession sharedSession];

    //创建地址字符串(不要放空格)

    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";

    //统一资源定位符
    NSURL *url = [NSURL URLWithString:urlString];

    //NSURLSession 是基于任务的,所以所有的东西都要放到任务里面, NSURLSessionTask就是NSURLSession的任务执行对象
    NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if (error == nil) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

            NSLog(@"dic == %@", dic);

        }

    }];

    //NSURLSession 的所有任务默认是挂起的,所以一定要调用resume方法,让任务开始

      //[task resume];

GET   POST异步代理方法

//NSURLSessionDataDelegate  NSURLSession获取网络数据的代理协议
@interface ViewController ()<NSURLSessionDataDelegate>

//保存结果的data
@property (nonatomic, strong) NSMutableData *resultData;

@end

POST:
- (IBAction)post:(id)sender {
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

        NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";

        NSData *potaData = [dataString dataUsingEncoding:NSUTF8StringEncoding];

        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:potaData];

    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];

    [dataTask resume];

}

GET:

- (IBAction)get:(id)sender {
 //NSURLSession代理的异步操作

    //NSURLSession 代理人属性是只读的
    //第一个参数: 会话模式
    //第二个参数: 代理人
    //第三个参数: 代理方法在哪个线程中进行
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration ] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];

    //NSURLSessionTask 的子类对象
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];

    [dataTask resume];

}

//代理实现的方法//服务器开始响应- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler{    // NSURLSession 的代理协议里面 必须设置允许继续请求 才会继续的响应服务器 获取到数据    completionHandler(NSURLSessionResponseAllow);    self.resultData = [NSMutableData data];            }

//接收数据- (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data{        [self.resultData appendData:data];            }//结束响应- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{        if (error == nil) {                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];                NSLog(@"dic == %@", dic);    }        }
时间: 2024-10-15 02:19:20

UI进阶之数据解析(网络请求NSURLSession)的相关文章

iOS 网络请求NSURLSession

iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我想是时候来分享一些对于我对于这些新的 API 的看法和心得了,新的 API 将如何影响我们编写程序,以及它们对于 API 设计理念的影响. NSURLConnection 作为 Core Foundation / CFNetwork 框架的 API 之上的一个抽象,在 2003 年,随着第一版的 S

Android中解析网络请求的URL

最近正在做Android网络应用的开发,使用了android网络请求方面的知识,现在向大家介绍网络请求方面的知识,我们知道android中向服务器端发送一个请求,(这就是我们通常所说的POST请求),我们要发送一个完整的URL,然后服务器端接收到这个URL,对这个URL进行特定的解析,就是对URL进行解析,转化为JSON数据,然后,我们只要处理这个JSON数据就可以了. 我现在就用我的项目实例来体现解析URL的过程: 1.组装URL的过程: private String getOrderPayU

011-通过网络协议解析网络请求-DNS-ARP-TCPIP

一.概述 1.1.tcp/ip概述 TCP/IP不是一个协议,而是一个协议族的统称.里面包括IP协议.IMCP协议.TCP协议.跨越了多层模型的多层 TCP/IP协议族按照层次由上到下,层层包装.最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议.而第二层则是传输层,著名的TCP和UDP协议就在这个层次.第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标.第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据

iOS 网络请求 NSURLSession 的上传文件方法

NSURLSession/NSURLConnection的上传文件方法 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理内容就此略过.在此只略提相关内容.文中涉及的设计源码可以通过这里获取 https://github.com/wuqingjian2015/uploadHelper,有意者可以去看看. HTTP是干什么用的呢? 先考虑一下以下应用过程: 从客户端向服务器端发起一个请求

怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目project变得无比庞大臃肿. 假设看过这篇文章或者在使用过这样的方式之后呢,全部的工作都能够被压缩成仅仅有两个文件,一个JAVA文件一个XML布局文件. 并且代码还少少的. 咱们来看看实际情况: 寻常的一个列表页面的生成须要下面文件: 一个Activity文件.有时候可能还会忘记注冊 一个包括上下拉

Flutter - 网络请求与 json 解析

Flutter网络请求与JSON解析 Flutter网络请求与JSON解析 网络请求项目中用了两种,一个是 dart 自己的 dart:io, 另外一个是 dio 这个库. json 解析则用的是 dart:convert. 发起 HTTP 请求 首先我们需要先导入 http 的支持包,然后创建 httpClient. import 'dart:io'; var httpClient = new HttpClient(); HttpClient 支持常见的 get.post.put.delete

iOS网络请求基础

这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在网络请求也都是使用AFNetworking.下面就把我自己关于afn和系统的api使用写下来. 一.使用NSURLSession 移动端的网络请求主要是get请求和post请求, get和post请求步骤差不多,只不过post对于信息的传送更安全,post请求会设置body而且会对body进行加密,

UI进阶 多线程

一.多线程概述 程序.进程.线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源. 线程:程序中独立运行的代码段.(例如:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程. 主线程在程序启动时被创建,用于执行main函数. 只有一

android网络请求库volley方法详解

使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest(“请求方法”,“请求的网络地址”,“成功的网络回调”,“失败的网络回调”): Ima