zoukankan      html  css  js  c++  java
  • ios接收数据的两种方式 一种是ASI 另一种是系统自带的类

    ASI  使用ASIHttpRequest第三方开源库进行信息的下载

    导入ASIHttpRequest源码

     //创建一个ASI对象

        ASIHTTPRequest *request =[ASIHTTPRequestrequestWithURL:url];

        //设置代理

        request.delegate = self;

        //不同request可以通过tag值进行标记

        request.tag = 100;

        //request执行异步请求数据,默认请求方式为get请求

        [request startAsynchronous];

        //[request startSynchronous];(同步请求)

     

    #pragma mark - ASI Delegate

    //当数据下载完成时,调用此方法

    - (void)requestFinished:(ASIHTTPRequest *)request;根据request.responseData来获取数据

    //数据下载失败或者没有网络、请求数据超时的时候,调此方法

    - (void)requestFailed:(ASIHTTPRequest *)request

     

    利用系统函数NSURLConnection来接受数据

     //用请求的url生成一个请求,请求对象带有请求信息,客户端会将request带给服务端

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //主线程显示UI和子线程请求数据同时进行,在connectionDidFininshLoading方法调用后,将请求的数据自动调给主线程

        _urlConnection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];

    #pragma mark - conntectionDataDelegate

    //当客户端收到服务端对请求的回应时,调用此方法

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{//NSURLResponse 服务端网络请求回应的基类

        //http协议下的回应应该为NSHTTPURLResponse

        NSHTTPURLResponse *http = (NSHTTPURLResponse *)response;

        //带有服务端回应的状态码(200 代表成功,服务端能满足客户端请求;404 客户端请求的资源服务端没有找到;400 客户端请求的语法错误;500服务器错误)

         NSInteger status =[http statusCode];

        NSLog(@"status:%d",status);

        //清空旧数据

        [_downloadDatasetLength:0];

    }

    //当服务端发送数据的时候,调用此方法,用于接收数据

    //如果数据量较大,此方法可能会被执行多次

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

        //将服务端发送过的数据拼接到_downloadData

        [_downloadData appendData:data];

    }

    //当客户端接收数据完毕后,调用此方法

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

        if (_downloadData) {

            //对数据进行后续操作

          id result=[NSJSONSerializationJSONObjectWithData:_downloadDataoptions:NSJSONReadingMutableContainerserror:nil];

            if ([result isKindOfClass:[NSDictionary class]]) {

                NSDictionary *dic = (NSDictionary *)result;

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

                NSArray *array = [dic objectForKey:@"users"];

                [_dataArray addObjectsFromArray:array];

            }

            //刷新视图,让tableView利用带有数据的_dataArray进行显示

            [self.tableView reloadData];

        }

    //可以不用json解析数据  之后会对数据的解析做一个详细的介绍

    }

     由此可见 第三方asi的方法相对的轻松一些

  • 相关阅读:
    vue中computed计算属性和methods区别
    java解决跨域问题
    redis服务端开启
    使用excel生成商品条形码
    MySQL主键自增时SQL写法/当前时间写法
    修改MySQL数据库密码
    MySQL5.6.42解压版安装教程
    完全卸载MySQL数据库
    IDEA快捷键及xml文件中网址报错
    IDEA导入外部包
  • 原文地址:https://www.cnblogs.com/AbelChen1991/p/3602245.html
Copyright © 2011-2022 走看看