• ios之网络数据下载和JSON解析


    ios之网络数据下载和JSON解析

    简介

      在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据以及如何解析下载下来的JSON的数据格式,以及如何显示数据和图片的异步下载显示

      涉及到的知识应用:

      1.NSURLConnection异步下载和封装

      2.JSON格式和JSON格式解析

      3.数据显示和使用SDWebImage异步显示图片

    内容

      1网络下载基础知识介绍

        什么是网络应用?

          一般情况下,iPhone上绝大多数的应用都需要网络才能运行,就是网络应用。

        网络应用的程序结构

          在网络上运行一个程序为应用提供数据, 或者提供服务, 那么这个网络应用一般称为客户端, 而网络上运行的服务称为服务端。

        常见的网络接口形式

                     iOS网络应用常见的数据接口一般都是HTTP形式的URL地址。

        界面开发的一般流程

          下载数据  NSURLConnection+URL 

          解析数据  JSON/XML

          建立数据模型model

          创建视图 使用视图显示

                     tableView +定制cell

                     图片异步下载SDWeblmage

      2NSURLConnection的使用

        NSString同步下载数据

        

    NSError *error = nil;
        NSURL *url = [NSURL URLWithString:urlString];
        NSString *content = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
        if (error==nil) {
            NSLog(@"content = %@",content);
        }
        else
        {
            NSLog(@"下载失败");
        }
    

      

        NSURLConnection 同步下载

    NSURL *url = [NSURL URLWithString:urlString];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        NSError *error = nil;
        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
        if(error == nil)
        {
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"str = %@",str);
        }
        else
        {
            NSLog(@"下载失败");
        }
    

      

        NSURLConnection 异步下载

        

    @property (copy,nonatomic) NSMutableData *data;
    
    //作用:
    //  传入网址, 下载完成执行后执行target对象中action方法
    -(void)requestWithUrl:(NSString *)url target:(id)target action:(SEL)action;
    
    
    @interface ZJHttpRequest ()<NSURLConnectionDataDelegate>
    {
        NSURLConnection *_connection;
        NSString *_url;
        id _target;
        SEL _action;
    }
    @end
    
    @implementation ZJHttpRequest
    //作用:
    //  传入网址, 下载完成执行后执行target对象中action方法
    -(void)requestWithUrl:(NSString *)url
                   target:(id)target
                   action:(SEL)action
    {
        _url = url;
        _target = target;
        _action = action;
        
        //发起URL请求
        _data = [[NSMutableData alloc] init];
        _connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] delegate:self startImmediately:YES];
    }
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        [_data appendData:data];
    }
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        //下载完成了, 执行保存的方法
        if(_target && [_target respondsToSelector:_action])
        {
            [_target performSelector:_action withObject:self];
        }
        
    }
    

      

      3JSON格式说明和格式化工具

        

    JSON格式

        {

            "count":20,

            "data":[

                "zhangsan",

                "lisi",

                "wangwu"

            ]

        }

        []    表示数组,对应NSArray

        ,     表示并列的数据

        {}    表示字典,对应NSDictionary

        :     表示键值对

        "xxx"  表示字符串,对应NSString

        20    对应NSNumber

      4一个完成页面的实现(包含model的创建,SDWebImage的使用)

  • 相关阅读:
    Android 表格布局
    Python 字符串操作分类
    设置Safari禁止访问某个网站
    java判断路径是文件夹还是文件
    java上下分页窗口流动布局
    Python获取网页html代码
    一次失败的java Box居中尝试
    装饰器进阶和迭代器
    函数对象补充,包函数与装饰器
    函数对象和名称空间
  • 原文地址:https://www.cnblogs.com/gdwcz/p/4384515.html
Copyright © 2020-2023  润新知