初级网络-day1-JSON解析

//
//  ViewControllerA.m
//  初级网络-day2-JSON练习
//
//  Created by bch on 15-3-24.
//  Copyright (c) 2015年 白超华. All rights reserved.
//

#import "ViewControllerA.h"
//引入处理图片和网络请求的库,主要用于异步下载图片
#import "UIImageView+WebCache.h"
//定义一个URL来解析对应的JSON
#define BOOK_URL @"https://api.douban.com/v2/book/1220562?apikey=0305449cf6bb6dfc090fcdd6e43249f4"

@interface ViewControllerA ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate>
{
    NSURLConnection *_connection;//用于网络连接
    NSMutableData *_receiveData;   //用于接收数据的变量
    UIImageView *_picView;  //显示图片,准确的来说是相框

}
@end

@implementation ViewControllerA
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    if (self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
      //初始化
        _receiveData=[[NSMutableData alloc]init];
    }
    return self;

}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //首先,我们向服务器发起请求
    _connection=[NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:BOOK_URL]] delegate:self];
    _picView=[[UIImageView alloc]initWithFrame:self.view.bounds];
    //请求图片
    //setImageWithURL下载并缓存图片
    //setImageWithURL  placeholderImage 下载并且缓存图片,在图片未下载完之前显示placeholder图片内容
//    [_picView setImageWithURL:[NSURL URLWithString:@"http://img1.tgbusdata.cn/v2/thumb/jpg/NDJDQyw1OTUsMTAwLDQsMywxLC0xLDAscms1MA==/u/zx.tgbus.com/UploadFiles_4349/201309/2013092510153873.jpg"] placeholderImage:[UIImage imageNamed:@"1.png"]];
    [self.view addSubview:_picView];
    
    
    
    
}
#pragma mark-connection的代理方法
//服务器的响应信息
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //清空数据
    _receiveData.length=0;
}
//接收服务器传过来的数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [_receiveData appendData:data];
}
//传输结束,那么我们开始解析JSON数据
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"我们下载下来的东西就是  str = %@",[[NSString alloc]initWithData:_receiveData encoding:NSUTF8StringEncoding]);
    //解析JSON字符串称为对象
    /*
     由于JSON是以字典的形式存在,所以我们用一个字典来接收它。
     JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil
     上面的方法是用来接收JSON数据的,其中OPtion是一个枚举,有三个选项,但不清楚三个选项的区别
     
     
     */
    NSDictionary * dataDic=[NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil];
    //下面这句话,实际上是从JSON中取东西,由于我们把JSON存放在了名为dataDic的字典中,所以下面这句话的格式,实际上是从dataDic中取出值为images的键,同时,而后面的large则是从images中取出值为large的键。也就是说字典dataDic中包含了一个images对象,这个对象里面有很多键值对元素,large就是其中一个。
    NSLog(@"image = %@",dataDic[@"images"][@"large"]);
    NSLog(@"dataDic下tags下,第[2]个,里面的值为name的键 = %@",dataDic[@"tags"][2][@"name"]);
    
    //那么让我利用这次机会,和_imageView来回顾一下同步和异步的区别吧
    
    //下面2个方法都是下载,只是下载方式不同,下载完成之后,将图片给_picView
    /*同步请求*/    //利用字典
  //  _picView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:dataDic[@"images"][@"large"]]]];
    /*异步请求*/    //异步下载,利用字典
    //[_picView setImageWithURL:[NSURL URLWithString:dataDic[@"images"][@"large"]] placeholderImage:[UIImage imageNamed:@"1"]];
    
    
    
    
}
//服务器响应失败
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    if (error) {
        NSLog(@"%@",error);
    }
    
}

@end

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。